0

ネストされたすべてのスコープでアクセスする必要があるコレクションがあります。ディレクティブ テンプレート内、ng-repeat のディレクティブ内... n レベルの深さ。$scope.$parent.$parent.$parent....$parent.MyList と言う必要はありません。

$rootScope を使用してみましたが、明らかに、これがどのように機能するかを理解していません。次のように、宣言中にディレクティブに渡します。

$rootScope.MyList = ["list": 1];
...
...
MyApp.directive('mydirective', ['$rootScope', function ($rootScope) { 
return {
   restrict:  'A',
   replace: false,
   link: function (scope, rootScope) {

}
}
}])

rootScope には MyList が含まれていません。私が間違っていること、またはそれを行うためのより良い方法はありますか? ファクトリまたはサービスを使用することを考えましたが、それを設定する方法がわかりません。また、Angular のドキュメントがいかにくだらないものであるかは誰もが知っているため、検索は非常にイライラします。

4

3 に答える 3

0

この動作を再現するplnkrまたはjsfiddleを提供できますか? を使用してコントローラーにサービスと通信させることができます$rootScopehttp://plnkr.co/edit/IEhOde

ただし、必要なservice値をキャッシュし、それをディレクティブに挿入して値を取得する を作成することをお勧めします。

于 2013-10-10T19:53:35.150 に答える
0

まず、$rootScope.MyList = ["list": 1]構文エラーがあります。$rootScope.MyList = ["list", 1]またはである必要があります$rootScope.MyList = [{"list": 1}]

プロトタイプの継承により、割り当てたもの$rootScopeはすべて、子 (分離スコープを除く) 内でアクセスできます。$scopes

一般に、アプリ全体で何かを共有したい場合は、それを$rootScope同じように割り当てるか、トップレベルAppCtrlを作成して$scope.MyList=...、ネストされたすべてのスコープがアクセスできるようにすることができます。AppCtrl2番目のオプションは、データを提供するサービスを注入できるため、テスト容易性に関しては少し優れていMyListます。このパターンの動作は、AngularJS GlobalCtrl vs $rootScope vs Serviceで確認できます。

于 2013-10-10T19:53:45.153 に答える