![](/img/trans.png)
[英]Angular: select ng-model programmatically changed but ng-change event doesn't fire
[英]Angular - ng-change not firing when ng-model is changed
輸入如下:
<input type="text" ng-model="repair.test" ng-change="action()" />
當我手動輸入和更改輸入時執行action()
。 但是,如果我通過編程方式通過其他函數更改repair.test值,則不會觸發ng-change的操作。 我已閱讀角度教程,這可能是預期的行為。
https://docs.angularjs.org/api/ng/directive/ngChange
“當值變化來自模型時,不會評估表達式。” < - 我也需要這個。 當模型以任何方式改變時,如何在控制器中觸發動作? (輸入輸入或任何其他功能)
謝謝您的幫助。
編輯:
模型值實際上是form.$valid
,它有自己的Form控制器(我認為),這就是我使用action函數嘗試將值傳遞給父控制器的原因。 所以$scope.$watch
目前不起作用,只有在初始化時。
ngChange僅用於輸入,如果你想聽模型這樣做
$scope.$watch('repair.test', function(newvalue,oldvalue) {
});
您可以在控制器中使用觀察器功能
$scope.$watch('repair.test', function() {
$scope.action();
});
另一種解決方案是使用一個指令來監視模型的任何變化,而不是使用ng-change
。
app.directive('onModelChange', function($parse){
return {
restrict: "A",
require: "?ngModel",
link: function(scope, elem, attrs, ctrl) {
scope.$watch(attrs['ngModel'], function (newValue, oldValue) {
if (typeof(newValue) === "undefined" || newValue == oldValue) {
return;
}
var changeExpr = $parse(attrs['onModelChange']);
if (changeExpr) {
changeExpr(scope);
}
});
}
};
});
然后你會像這樣使用它:
<input class="value" type="text" ng-model="myVar" on-model-change="doSomething(myVar)"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.