2013-06-18 13 views
7

状況複数回呼び出されます:私はすべてのルーティングを必要とせずにng-includeによる部分が含まれるようにしようとしていますNG-含める - コントローラは

。私はちょうど動的に多くの特定の部分を含めるしたいと思います。これは多かれ少なかれ次のようになります。

<div ng-controller="SomeController"> 
    //This controller defines a $scope.getPartial(id) 
    <ng-include src="getPartial(something.id)"></ng-include> 
</div> 

動作しますが、部分的に含まれています。しかし、コンソールを見ると、コントローラーが何回か呼び出されて初めて呼び出されることがわかります。404

GETパス/ to/partials/undefined.html [HTTP/1.1 404が見つかりません162ms]

最初にインクルードされたときにsomething.idが定義されていないようです。

質問

  • 私は単に新しいスコープを作成せずに、部分的に含むことができ、どのように?
  • これができない場合は、どうすればコントローラが一度だけ呼び出されるのですか?
  • と404を避けるにはどうすればよいですか?

私はAngularJSの新機能を使用しているため、間違った前提や誤解を招く可能性があります。啓発してください。

答えて

6
  1. ngIncludeは、定義によって新しいスコープを作成するので、簡単に回避することはできません。ネストされたスコープは相互に継承するので、新しく作成されたスコープはSomeControllerにあるものを読み取ることができるので、新しいスコープに問題はないはずです。
  2. ngIncludeのsrc属性は$ digestスコープごとに再評価されるので、コントローラのメソッドを繰り返し呼び出すことを止めることはできません。さらに言えば、あなたの方法は、光と高速であることを確認する必要があり、それはあなたがidがまだ定義されていないとき「」空の文字列を返すことによって、初期404を回避することができる
  3. 同じ入力与えられた同じ出力を返します:

 

$scope.getPartial = function(id){ 
    if(!id){ 
    return ""; 
    } 
    ... 
} 
+7

+1。私はまた、角度のロットで物事の複数回または時々予期しない時間と呼ばれることを追加したいと思います。あなたは、あなたの理解を不可欠から宣言的に変える必要があります。 Think css。あなたは(通常)ブラウザが何回再描画しても気にしないで、スタイル/クラスの変更に基づいてリフローします。 –

+0

+1 CSSの再描画との良好な比較。 – Stewie

+0

ありがとう、ちょっとハッキリしているようですが、おそらく私はちょうど再描画パラダイムに慣れていません;) – markus

関連する問題