編輯:在AngularJS中,是否可以強制視圖從其控制器外部進行更新?
標題中所述的問題在下面正確答案,所以我認爲,爲了人們看到如何做到這一點,我應該留下問題以下面的答案。
事實證明,我正在使用的框架還沒有完全將Angular的變量轉換爲camelcase慣例。它在大多數地方都被抽象出來,只是不在這裏,現在一切正常,所以我根本不需要強制重繪。如果有人這樣做,請參閱下面的答案。 :)
編輯:在AngularJS中,是否可以強制視圖從其控制器外部進行更新?
標題中所述的問題在下面正確答案,所以我認爲,爲了人們看到如何做到這一點,我應該留下問題以下面的答案。
事實證明,我正在使用的框架還沒有完全將Angular的變量轉換爲camelcase慣例。它在大多數地方都被抽象出來,只是不在這裏,現在一切正常,所以我根本不需要強制重繪。如果有人這樣做,請參閱下面的答案。 :)
在您的指令中執行事件綁定,而不是在您的控制器內部。必須調用從你的指令內$apply()
如果你更改了一些模型,並希望這些更改指令外反映:
myApp.directive('someDir', function() {
return {
restrict: 'E',
scope: {
model: '=',
},
link: function (scope, elt, dirs) {
elt.bind('click', function() {
scope.$apply(function() {
// make changes to scope.model
});
});
}
}
});
好的,所以這是一個不好的問題,我會接受你的答案,主要是因爲它回答了我問的問題。事實證明,我遇到的問題是我用我正在使用的框架部分地從Angular中抽象出來,並且我不知道在這種情況下可變插值機制不是從我這裏抽象出來的。我所要做的就是使用這個約定,並且在我的指令中,我在camelCase中正確地獲取了數據。 –
如果您雙向綁定,你有什麼重繪?我們可以在Plunker上得到一個更完整的例子嗎?另外,*從不*在你的控制器中引用DOM - 這是不好的juju。 –
@JoshDavidMiller不,我不能在任何地方重現整個框架,不幸的是。我所說的是「=」應該是綁定數據,但事實並非如此。我可以根據需要更改我傳入的變量,視圖不會重繪本身。 –
我當然不想要「整個框架」,只是一個簡單的例子,因爲我時間有限。我不知道你的意思是「不重繪自己」。如果你的意思是這個值沒有被更新,那麼你的代碼有些問題。但是我們不能告訴你什麼沒有看到一些代碼。 –