angular ng-model 不更新脏值
angular ng-model don't update on dirty value
我想知道是否可以 'prevent' 更新由于用户交互而变脏的表单字段(输入,select...)。
如果我更新 ng-model 原语(即:将 pippo 从 1 设置为 X)输入
即使我手动编辑控件也会更新。
有可能避免这种情况吗?
demo page:
http://plnkr.co/edit/ClXoS7YVcEDtcApsNpde
输入字段每 X 秒计数 UP。
如果我输入 "AAA" 我希望停止更新,因为
由于用户交互,输入是 "dirty"。
如果我有问题,也许这就是您想要做的?
$scope.$watch("pippo", function(){
if($scope.pippotmp != $scope.pippo)
$scope.useredited = true;
});
更新答案
您可以将模型与输入变化分开......在一个临时变量中
在输入元素上添加 ngChange
属性,
<input type=text ng-model="pippo" ng-change="userChanged()"/>
//controller
$scope.pippo = 1;
$scope.isUserChanged = false;
$scope.counter= 1;
$scope.userChanged = function(){
$scope.isUserChanged = true;
}
this.update = function() {
if(!$scope.isUserChanged){
$scope.pippo += 1;
}
}
$interval(this.update, 3000);
userChanged
会在用户输入的时候调用,但是当pippo
被controller中的其他方法改变时不会被调用,所以我们可以在userChanged
中设置一个标志来指示是否输入已被用户覆盖
您可以使用 ngModelController 判断输入是否脏了。 https://docs.angularjs.org/api/ng/directive/ngModel
将您的 plunker 修改为 http://plnkr.co/edit/oJMrQZLugnzisqdXScvN?p=preview
更新函数看起来像
this.update = function() {
if(!$scope.frmPippo.pippo.$dirty)
$scope.pippo += 1;
}
我可能答错了问题,但如果我理解正确,那么 ng-model-option 就是您要找的。
例如,您可以仅在用户离开输入时更新模型
ng-model-options="{ updateOn: 'blur' }"
您可以在文档中阅读更多相关信息:https://docs.angularjs.org/api/ng/directive/ngModelOptions
我想知道是否可以 'prevent' 更新由于用户交互而变脏的表单字段(输入,select...)。 如果我更新 ng-model 原语(即:将 pippo 从 1 设置为 X)输入 即使我手动编辑控件也会更新。
有可能避免这种情况吗?
demo page:
http://plnkr.co/edit/ClXoS7YVcEDtcApsNpde
输入字段每 X 秒计数 UP。 如果我输入 "AAA" 我希望停止更新,因为 由于用户交互,输入是 "dirty"。
如果我有问题,也许这就是您想要做的?
$scope.$watch("pippo", function(){
if($scope.pippotmp != $scope.pippo)
$scope.useredited = true;
});
更新答案
您可以将模型与输入变化分开......在一个临时变量中
在输入元素上添加 ngChange
属性,
<input type=text ng-model="pippo" ng-change="userChanged()"/>
//controller
$scope.pippo = 1;
$scope.isUserChanged = false;
$scope.counter= 1;
$scope.userChanged = function(){
$scope.isUserChanged = true;
}
this.update = function() {
if(!$scope.isUserChanged){
$scope.pippo += 1;
}
}
$interval(this.update, 3000);
userChanged
会在用户输入的时候调用,但是当pippo
被controller中的其他方法改变时不会被调用,所以我们可以在userChanged
中设置一个标志来指示是否输入已被用户覆盖
您可以使用 ngModelController 判断输入是否脏了。 https://docs.angularjs.org/api/ng/directive/ngModel
将您的 plunker 修改为 http://plnkr.co/edit/oJMrQZLugnzisqdXScvN?p=preview 更新函数看起来像
this.update = function() {
if(!$scope.frmPippo.pippo.$dirty)
$scope.pippo += 1;
}
我可能答错了问题,但如果我理解正确,那么 ng-model-option 就是您要找的。
例如,您可以仅在用户离开输入时更新模型 ng-model-options="{ updateOn: 'blur' }"
您可以在文档中阅读更多相关信息:https://docs.angularjs.org/api/ng/directive/ngModelOptions