2017-05-02 9 views
1

私は奇妙なエラーがあり、何が起こっているのか分かりません。

オブジェクトをチェックすると、$ validタグがtrueに設定されていることがわかります($ invalidはfalseを示します)。しかし、私はそのタグ(object。$ validなど)だけを出力すると、falseを出力します(objectは$ invalidがtrueを出力します)。

$scope.$watch('ctrl.form', form => { 
    console.log('The form is set to: ', form); 
    console.log('The form is valid: ', form.$valid); 
}); 

console log

これが起こってかもしれない、なぜ誰でも知っていますか?

+0

興味があるだけ、あなたはの順序を逆にするとどうなりますかconsole.logs? –

+2

これは、クロムコンソールの特定の動作に関連する可能性があります。オブジェクトを印刷して展開すると、印刷時ではなく展開時にオブジェクトの状態が表示されます。 –

+0

@sethflowers - 変更はありません。それでも同じ値が出力されます。 – Apolymoxic

答えて

1

問題は、その値がその関数で更新されていると思われます。値の変化を監視していますが、変更された値はまだ適用されていません。これは、そのハンドラ内のコードを予測不可能にする可能性があります。

スコープを適用すると「進行中」エラーが発生すると言われているので、有効であると思われます(ダイジェストはまだ動作しています)。このコードは、進行中のダイジェストをチェックし、必要に応じてそれを回避します。

if (! $scope.$$phase) { 
    $scope.$apply(); 
} 

Angularの "$$"は "プライベート"であることに注意してください。あなたはまだそれらにアクセスすることができますが、あなたは「想定されていません」。しかし、これはゼロタイムアウトとして無作為にあいまいではないという利点があります。

また、既に見てきたように、0のタイムアウトで強制的に更新を行うことができます。それはハックですが、うまくいき、数回使用されているのを見ました。

最後に、ライフサイクルイベントの1つが、ダイジェストが予測可能なコンポーネントの自然な流れの中の情報をトレースしていることがわかるように、これらのトレースのためのより良い選択肢かもしれません。そのライフサイクルフックについて

、あなたは(最後の段落はここにフィットするようで、何をしたい、おそらくです)1.5を使用している場合:

New: $onChanges 

This new hook is similar to ng2’s ngOnChanges. It is called whenever one way bindings are updated, with a hash containing the changes objects. 

Prior to this hook you sometimes had to use a $watch in order to do some work whenever a value you’re bound to changes. Using this hook makes things clearer and removes the need to introduce a watch and a dependency on $scope. 
+0

これは正に正しい答えだと私は信じています。しかし、私はイベントを解雇する必要があります(私はそれらの値が必要です)ので、私はライフサイクルの後半にイベントを処理する方法を見つけることができるまでタイムアウトが適切な位置にあります。あなたの助けと説明をありがとう! – Apolymoxic

+0

私が作った編集をチェックしてください。私はngOnChangesがあなたのために行く方法かもしれないと思います。うまくいけば1.5を使用しています。 –

+0

実際にはうまくいきます。それは問題になる負荷です。 – Apolymoxic

関連する問題