我知道指令中隔离范围的角度有一些变化。但是我无法弄清楚为什么我在指令中的元素上得到了错误的范围:
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 :(得分:0)
将模板重写为......
'<a ng-click="test()">template</a>'
......它应该有效。 Onlick是一个执行全局状态的浏览器函数,与angular及其范围模型无关。所以坚持像ng-click
这样的角度指令,并且可以使用你在范围内定义的方法。
这是一个jsFiddle,它执行该函数并具有对该元素的引用。