名前にアクセスするためのテンプレート。すべての良い。アクセス親コントローラn個のレベルが高い
私のテンプレートには、新しいスコープを作成するネストされたディレクティブがあり、下のどこかに私はng = controller = "SubControllerとしてSubCtrl"があります。 subcontroller.propertyを実行してサブコントローラのプロパティにアクセスできるようになりました。コントローラテンプレートが素晴らしいので、そのテンプレート内ではまだmain.nameにアクセスできます。
問題は、私の2番目のコントローラコードでは、親コントローラ内のものにアクセスする必要があります。これは、この時点でnレベル深いものです。私は
$scope.main = this;
...私はメインコントローラでこのようにこれを行うことができます知っていた後、第2のコントローラ
var main = $scope.$parent.$parent.$parent.$parent.main;
でこれを行うことが、我々はすべて我々がそれを行うべきではありません知っていると私は勝ちましたとにかく、開発者が新しいスコープを作成するディレクティブをどれだけ配置したのか分かりません。
これはサービスを作成する人がいると聞いていますが、一般的に行うのが難しいように思えますし、自分のフレームワークのユーザーがインクルードを入れるたびにサービスを作成する必要はありませんタブパネル、それは狂っているだろう。
私の現在のアイデアは、スコープを使用し、比較関数を使用して指定したスコープを見つけるまで親スコープをトラバースする関数を書くことです。私は良い方法かもしれないと思う。
地獄の人は何が間違っているのか明らかにすることなく質問を投票しますか?私はそれをかなりうまく説明したと思っており、それは完全に有効な質問です。 – jonhobbs
サービスを作成してみませんか?サービスは、1つ以上のコントローラ、ディレクティブ、ファクトリなどに必要なものにデータやアクセスを格納するのに最適な場所です。基本的にはシングルトンですが、複数の場所に注入しますが、常に同じインスタンスが注入されます。それはあなたが念頭に置いているもの($ parent. $ parent.n .....データ)よりも非常に使いやすく、脆弱です。あなたがユニットテストをしているのであれば、はるかにテスト可能です。 – Igor
私はそこにいましたが、コントローラ間で情報を共有したい場合は、サービスより優れていることを保証します。例:ユーザーinfoServiceに関する情報を格納するサービス。 'mainCtrl'は' infoService.registerUser({name: 'David'}) 'を実行し、' subCtrl'は 'infoService.getLatestUser()'を実行できます。 – pavlag