11
這是我的問題。例如,我們有以下指令,它在後臺使用一些jQuery的插件:AngularJS指令 - 使用ngModel和jQuery小部件時的最佳實踐
module.directive('myWidget', [function() {
return {
require: "ngModel",
restrict: "A",
replace: true,
templateUrl: "templates/myWidget.html",
link: function(scope, element, attrs, ctrl) {
element.widget_name().on('value_updated', function(event) {
scope.$apply(function() {
var newModelValue = event.some_value;
ctrl.$setViewValue(newModelValue);
});
});
scope.$watch(attrs["ngModel"], function(value){
element.widget_name('set_value', value);
});
}
};
}]);
所以,如果模型的價值變化,那麼這是使用$腕錶監聽模型改變註冊的處理程序將被執行,因此,小部件的'set_value'方法也將被執行。這意味着'value_updated'事件將被觸發。
我的問題是:什麼是實現指令的類似行爲,以避免DOM事件處理程序和觀察家的額外要求的最佳做法?
感謝馬克,您的解決方案完美地解決了我的問題。但是,你能否告訴我們 - 何時適合使用觀察者,何時執行$ render? – oaleynik 2013-03-14 08:02:19
@oaleynik,$ render()應該在你想做某事時被實現,因爲在Angular中改變了ng-model的值。 ng-model會自動爲我們設置手錶,如果它發現變化,則會調用$ render()。所以通常情況下,使用ng-model,你想實現$ render而不是使用你自己的$ watch。 – 2013-03-14 15:35:03