指令中的角度隔离范围是指父范围

时间:2014-02-05 21:12:33

标签: javascript angularjs angularjs-scope

我知道指令中隔离范围的角度有一些变化。但是我无法弄清楚为什么我在指令中的元素上得到了错误的范围:

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(),结果也一样。

此代码适用于以前的版本。不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

将模板重写为......

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

......它应该有效。 Onlick是一个执行全局状态的浏览器函数,与angular及其范围模型无关。所以坚持像ng-click这样的角度指令,并且可以使用你在范围内定义的方法。

这是一个jsFiddle,它执行该函数并具有对该元素的引用。