我有一个非常简单的指令(名为cooperate-with-ng-change
),需要ng-model
并且我希望它与ng-change
合作。
重申,我希望能够<cooperate-with-ng-change ng-model="model" ng-change="changeHandler()"></cooperate-with-ng-change>
但是,我注意到changeHandler()
被触发时,model
是旧值,而不是新值。
这里是指令定义对象:
return {
restrict: "E",
require: ["ngModel"],
scope: {
"value": "=ngModel"
},
template: "<label>Cooperate with NgChange: <input type='text' ng-model='value' ng-model-options='{debounce: 500}' /></label>",
link: function(scope, element, attrs, ctrls) {
var inputNgModelCtrl = element.find("input").controller("ngModel");
var parentNgModelCtrl = ctrls[0];
Array.prototype.push.apply(inputNgModelCtrl.$viewChangeListeners, parentNgModelCtrl.$viewChangeListeners)
//if I wrap all the parentNgModelCtrl.$viewChangeListeners in a timeout and digest in changeHandler
//then message matches afterDebounce
/*Array.prototype.push.apply(inputNgModelCtrl.$viewChangeListeners,
parentNgModelCtrl.$viewChangeListeners.map(
function(listener) {
return function() {
setTimeout(listener, 1)
}
}))
*/
}
}
Here's a plunker link if you want to play with it
我的猜测是在设置模型值之前调用$viewChangeListeners
,但是在设置模型值后我无法找到可能对应的内容。