2016-05-06 9 views
0

私は2つの異なる場所で再利用するコントローラを持っていますが、コントローラがデータを編集するページで使用されているかどうかを区別できるようにしたい単にデータを表示するページ。ここでの相違点は、1ページでコントローラが<... ng-form="someForm">タグ内にあることです。AngularJSコントローラがフォーム内にあるかどうかを確認する方法

(実際には、含まれます部分的なHTMLファイルであり、コントローラは、その部分の内側にある)

は、コントローラはフォームの内部に配置されているか否かを検出することが可能ですか?もしそうなら、どうですか?

答えて

0

formng-formではない)が必要な指示詞を作成でき、それがリンク機能に存在するかどうかを確認できることがわかりました。

someAngularModule 
    .directive('formAware', [function(){ 
     return { 
      require: '^?form', 
      template: ' <div>{{isPartOfForm ? "Inside the form" : "Outside of the form"}}</div>', 
      link: function(scope, element, attrs, formCtrl) { 
       scope.isPartOfForm = (formCtrl !== null); 
      } 
     } 
    }]); 

ディレクティブ(「フォーム内」テキストを表示する)NG-形の内側に配置することができる。

<div ng-form="myForm"> 
    <div form-aware></div> 
<div> 

またはNG-形無し(形式のテキスト」外側を表示します"):

<div> 
    <div form-aware></div> 
<div> 
0

私はあなたの要件を満たすためのショートカット方法を見つけることができませんでしたが、あなたができることの1つは$ rootScopeで変数を定義してコントローラの動作を追跡することです。ビューがコントローラでロードされるたびに、javascriptファイル内のdefine関数が呼び出されます。

したがって、$ rootScopeには、必要なコントローラがロードされているかどうかにかかわらずフラグを定義します。次に、フラグがロードされているかどうかを確認することができます。また、フラグが読み込まれたときに通知を受け取るために、フラグに$ watchを使用することもできます。いずれかの部分が不明な場合は教えてください。

ありがとうございました。

+0

私はあなたが誤解していると思いますが、コントローラがロードされているかどうかを確認したくありません。私はそれが読み込まれていることを知っているが、私はそれがフォームの中にあるかどうかを知りたい。 とにかく、私は$ rootScopeでむしろ混乱しないでしょう。私はコントローラ自体の中に含まれているロジックを維持するソリューションを探しています。 – neXus

+0

ディレクティブを使用し、そのディレクティブの内部html内でコントローラ名を検索することができます。そうすれば、あなたのロジックはそのまま維持されます。 –

関連する問題