4

例如我有指令

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

你能帮我吗?

4

1 回答 1

4

scope: true

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

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

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

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

更多关于 AngularJS 作用域

于 2013-07-16T16:02:47.030 回答