angularjs:从指令更​​新$ rootScope变量

时间:2014-04-04 19:59:21

标签: angularjs angularjs-directive

从指令更新rootScope变量的角度方式是什么? 我无法理解范围在指令中的工作方式......

到目前为止,我只能更改范围级别的变量。

app.run(['$rootScope', function($rootScope) {
    $rootScope.foo = false;
}

app.directive('myDirective', [function(){
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            elem.bind('click', function() {
                scope.$parent.foo = true;
                scope.$parent.apply();
            });
        }
    }   
}]);

<!-- does not update foo -->
<p>{{ foo }}</p>

<!-- updates foo -->
<div my-directive><p>{{ foo }}</p></div>

1 个答案:

答案 0 :(得分:8)

如果您需要在任何需要注入的地方访问$rootScope,它将可用:

app.directive('myDirective', ['$rootScope', function($rootScope) {
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            elem.bind('click', function() {
                $rootScope.foo = true;
                $rootScope.$apply();
            });
        }
    }   
}]);

还有一种更简单的方法,不需要注射。每个scope对象都可以通过$root引用访问最顶层的$ rootScope。这意味着你也可以这样做:

scope.$root.foo = true;