2014-02-05 226 views
0

我知道在指令內部,角度與隔離範圍有一些變化。指令中的角度隔離範圍指的是父範圍

angular.module('app', []) 
.run(function ($rootScope) { 
    $rootScope.val1 = '11'; 
    $rootScope.val2 = '22'; 
}) 
.directive('dir1', function() { 
    return { 
     restrict: 'E', 
     scope: {}, 
     template: '<a onclick="angular.element(this).scope().test()">template</a>', 
     link: function (scope, element, attrs, ctrl, transclude) { 
      scope.test = function(){console.log('test');} 
     } 
    }; 
}); 

這裏也是jsFiddle:但是爲什麼我得到錯誤的範圍內指令的元素我一直無法弄清楚。

onclick事件中,範圍指的是$rootScope而不是指令的範圍。所以它沒有找到未定義的test方法。

我缺少的是爲什麼我從指令中的元素獲取錯誤的作用域。我可以做angular.element($("a")[0]).scope().test(),結果是一樣的。

此代碼在以前的版本中工作。不知道我做錯了什麼。

+0

你可以看看這個http://stackoverflow.com/questions/19943935/angularjs-scope-difference-1-0-x-vs-1-2-x –

回答

0

重寫你的模板......

'<a ng-click="test()">template</a>' 

...,它應該工作。 Onlick是一個執行全局狀態的瀏覽器函數,並且與角度和範圍模型無關。所以堅持像ng-click這樣的角度指令,並且可以使用您在示波器上定義的方法。

這裏是一個jsFiddle執行該功能,並有一個元素的引用。

+0

它應該評估到正確的範圍,雖然,因爲我傳遞了元素引用('this')。此外,我正在嘗試上傳文件,並且有一個隱藏的輸入,我需要'onclick'。 'ng-click'不知何故無法正常工作。 – davekr

+1

在角度指令中,您將鏈接函數中的元素引用爲參數。這就是爲什麼你有'元素'參數。使用onlick和全局函數是角度錯誤的方法。可能會閱讀更多的指令文檔。 docs.angularjs.org/guide/directive –

+0

好的,我知道'onclick'不是角度的方式,但這不是問題。我可以做'angular.element($(「a」)[0])。scope()。test()'並且結果將是相同的,這不是根據文檔預期的行爲。 – davekr