2013-03-20 102 views
0

結合我修改了AngularUI,引導direvtive工具提示,以幫助我顯示錯誤消息,這裏是我做過什麼至今:http://jsfiddle.net/distractedBySquirrels/TaAHZ/AngularJS:更新模板,通過指令

但我有動態消息的問題。第一次將鼠標懸停在第一個輸入字段上時,消息位置錯誤,這是因爲模型尚未正確更新。當然,第二次鼠標懸停後,工具提示是在正確的位置。但如果要顯示的消息再次發生變化,則會發生同樣的故障。

我使用$parse更新模板:

$parse('tt_content').assign(scope, 
    getErrorMessage(ctrl.$error) || attrs.tooltip 
); 

好像不是所有的聽衆都revceived和更新,「ttHeight」和「ttWidth」仍設置爲「老」的價值觀。消息/模型的正確更新僅適用於$ observe,這由第三個示例說明。

我堅持,不知道我做錯了什麼? :(

回答

0

的問題是,當你修改模型與應用$,則需要​​手動以通知該模型的所有觀察家激活消化週期。因此,基本上,你需要添加scope.$digest();每當你改變的範圍做這樣的事情scope.$apply(show);

我修改你的代碼我的建議在這裏http://jsfiddle.net/TaAHZ/2/

+0

'$ apply'導致角進入其[摘要環路(http://docs.angularjs.org/guide/概念#運行時)。「$ digest循環持續迭代,直到模型穩定。」你不還需要調用'$ digest' - 這隻會導致Angular再次進入摘要循環。你的小提琴似乎不能解決問題。 – 2013-03-21 15:27:48

+0

問題在http://jsfiddle.net/TaAHZ/2/中沒有解決?這對我來說看起來很好(假設延遲是一種理想的行爲,參見JS第109行)。 我相信手動調用$摘要,即使在$ apply之後,也可以解決這個問題。 – odiseo 2013-03-21 16:10:42

+0

我在Chrome中試過它,並且第一個輸入字段的工具提示仍然出現在錯誤的地方,最初是您的小提琴。如果我將鼠標懸停在字段上,則工具提示位置不正確。如果我再次鼠標滑過,它就會出現在正確的位置,就像OP的小提琴一樣。 – 2013-03-21 16:14:41