AngularJS:指令范围中的rootScope

标签 angularjs angularjs-scope

例如我有指令

App.directive('module', function($compile)
{   
    return  {

        replace     : true,         
        restrict    : 'E',
        link: function(scope, iElement, iAttrs)
        {   
            scope.localName = '1';
        },

        template : '<div> {{ name }} - {{ localName }}</div>',  
    }       
});

在应用程序运行功能:

App.run(function($rootScope, $location)
{
    $rootScope.name = "test";
}

因此,通过这种方式,所有指令的指令范围都相同,但该范围将有权访问 $rootScope :

<module></module> 
<module></module>

http://i.stack.imgur.com/QF8wM.png

但是,如果我将创建一个孤立的范围:

App.directive('module', function()
{   
    return  {

        replace     : true,         
        restrict    : 'E',
        link: function(scope, iElement, iAttrs)
        {   
            scope.localName = '1';
        },

        template : '<div> {{ name }} - {{ localName }}</div>',
            scope : {}  
    }       
});

范围会有所不同,但它们可以访问 $rootScope .

http://i.stack.imgur.com/XITHr.png

所以我需要隔离每个指令的范围,但我需要这个范围才能访问 $rootScope .

你能帮我吗?

最佳答案

scope: true
不是孤立的,不是共享的,而是每个指令实例都有一个新的原型(prototype)继承范围。

http://jsfiddle.net/4LAjf/1

您可以使用 console.log(scope.$id) 记录范围的 id .与 scope: {}例如,您会得到 003 和 004。使用 scope: false (或没有),范围是共享的,例如两者都有002。
scope:true他们有不同的ID,但可以读取$rootScope .

在现场示例中,您可以在本地变量 localName 中看到范围 ID。 .我将虚拟指令命名为 mydir而不是 module .将模块命名为指令看起来很奇怪。

More about AngularJS scopes

关于AngularJS:指令范围中的rootScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681193/

相关文章:

javascript - 在 angularjs 中使用 'track by' 选择默认下拉列表不起作用

javascript - 在选择标签中重定向 ng-change

angularjs - 我的 ng-model 真的需要一个点来避免子 $scope 问题吗?

javascript - Angularjs keyup 与带有西里尔字母的按键

javascript - 如何使用 AngularJS 获取具有唯一值的数组

angularjs - Angular + Node.js HTTP 和 HTTPS (SSL)

javascript - 保留 $http.get 异步结果处理的变量值

javascript - 类型错误 : undefined is not a function --- Need to troubleshoot

javascript - 指令内的 Angular watch 没有 Controller ?

angularjs - 由所有 Parse 请求错误回调调用的 Angular 全局实用程序函数