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 を確認できますlocalNamemydirの代わりにダミーディレクティブに名前を付けましたmodule。モジュールにディレクティブという名前を付けるのは奇妙に見えます。

AngularJS スコープの詳細

于 2013-07-16T16:02:47.030 に答える