9

問題は、私はui-routerを使用しています。私は2つのビューを持っています.1つはツールバーの一種で、2つ目はフォームのコンテンツです。Angular.js - フォーム検証でイベントが発生しますか?

ツールバーに保存ボタンがあります。フォームが$validでない場合は無効になります。しかし、二つは全く異なるスコープ上にあるものを、それはのようだ:

  • rootScope
    • ツールバースコープ(form.$valid付き)
    • コンテンツスコープ

は、だから私は、私がしようと思いましたそのフォームで放出された$ validなイベントを聞いてそれを処理します。 Vojtaがhereこれらのイベントが存在するはずですが、私は彼らがどこにも指定見つけることができない...とthisを見て、私はすべてのイベントが表示されていないと述べたところによると

..

私はおそらく

を行うことができます
$scope.$watch('form.$valid', function(newVal, oldVal) { 
    $scope.$emit('validityChange', {'form':newVal}); 
}); 

が、それはイベントを使用してのように感じているのではなく、これは

良いでしょうか、私は完全に異なる何かを試してみてください?コンテンツのUIビュー内にツールバーのUIビューを配置することはできません.Adaptinを thisにすると、2つのUIビューは同じスコープを持つことができません。

答えて

0

直接質問に答える: 私はangularjsのネイティブフォームイベントを認識していません。しかし、あなたが知っているように、自分のイベントを簡単に作成することができ、それがあなたの問題を解決します。

私の提案は次のとおりです。 お互いに通信するために2つのコントローラを作成しようとしています。イベントを使用することは間違ったアプローチかもしれません。イベントは、認証などのアプリケーション全体の通知に実際に使用する必要があります。

フォームをリファクタリングして、同じコントローラを共有する2つのディレクティブにボタンを送信できます。スコープを共有しませんが、通信に使用できるコントローラオブジェクトを共有します。私はこのようにします。

もう1つの方法は、2つのスコープを互いにネストすることです。フォームコードを上位レベルのコントローラに移動します。このように:

  • ここでの主な//フォームのコード
    • ツールバーが//ボタン提出

      • rootScope機能へのアクセスを
      • コンテンツ//フォームが機能へのアクセスをしていてい

役立つことを願っています!

+0

が適切で、この答えはありませんでしたか? –

0

両方のビューが異なる状態を持つ必要があり、両方が同じメインコントローラとメインHTMLページにあると仮定すると、ng-ifと一緒に状態名を使用して条件を指定できます。

コンテンツ」の状態は、コンテンツビューに適しています。あなたのツールバーが含まれているあなたのHTMLのdivタグで今すぐ

、この条件が満たされた場合、このすなわち

ng-if = $state.current.name === 'content' && 'nameOfYourForm'.$valid 

に似たボタンフィールドを、保存あなたのに条件何かを言及し、間接的に自分のフォームが有効であることを意味し。

しかし、runメソッドでこれを記述する必要があります。これはモジュール宣言と同じjsファイルで宣言する必要があります。

angular.module('nameOfModule' , ['dependency1', ..]). run(run) 

そしてあなたのrunメソッドでは、$ rootScopeと$状態を注入し、宣言し、このようにそれを定義します。

function run(stateHandler, .. ,$rootScope, $state) { 
    $rootScope.$state = $state; 
} 
関連する問題