2017-04-10 19 views
1

角度コントローラとng-showが依存する変数を設定する関数を呼び出すタイムアウトがあります。変数は正常に変更されているようですが、html要素はまだ表示されています。角度変化が変数への反映を反映しない

私のコントローラ内のJSは、次のとおりです。

ことが重要ならば$ http.postコール(の成功機能で何が起こっている
setTimeout(function() { 
     console.log('showAlert is - ' + $scope.showAlert); 
     $scope.showAlert = false; 
     console.log('showAlert now is - ' + $scope.showAlert); 
     $scope.message = ''; 
}, 3000); 

とHTMLは次のとおりです。

<h3 ng-show="showAlert">{[{message}]}</h3> 
コンソールに表示される内容

は次のとおりです。

showAlertがある - 真

showAlert now is - false

これは正常に変更されているため、テンプレートはそれに従っているようではありません。ページがロードされると正しく隠され、$ scope.showAlertはもともとfalseに設定されています。

これは非常に簡単な例のようですが、なぜこれが機能しないのかわかりません。もし私がタグを包含物に入れても、それは同じように機能します。

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

+0

なぜあなたは{[{}]}を書いていますか?マークアップの設定を変更しましたか? – Sorikairo

+0

私が何を話しているのかわからない場合は、{{message}}と書いてください。 – Sorikairo

+0

私はそれを変更しました。 – jaibhavaya

答えて

0

settimeout funtionを呼び出して3秒後にスコープを変更すると、DOMがすでにロードされている可能性があります。値が後で変更された場合は、$ scope.showalertの初期値が使用されます関数の最後に$ scope。$ apply()を置くことができます。

+0

これは完全にそれだったし、働いた。これはちょっと奇妙なことですが、ボタンのクリックなどでこの変数を変更した場合、setTimeoutによって遅れてしまった場合と、何かが問題になる理由を完全に理解できません。あなたはそれを説明できますか?本当にありがとう! – jaibhavaya

+0

ボタンクリックでの変数の変更とこのsettimeoutとの違いは、ボタンのクリックが完全なダイジェストサイクルをトリガーすることです。つまり、スコープ値を変更し、値の変更に基づいてイベントをトリガーし、DOMで適用します。 DOMがすでにロードされていてUIの変更を適用する場合は、$ apply関数を呼び出す必要があります。 – anveshtummala

関連する問題