[英]Angular $scope.$watch for variables that changed only from the form (ng-model directive)
我有一个侦听器,当模型发生更改时,该侦听器会将HTTP请求发送到服务器。
JS代码:
$scope.a = 1;
$scope.$watch('a', function(newValue, oldValue) {
sendSaveRequest(newValue);
});
HTML形式:
<form>
<input ng-model="a" />
</form>
此代码可以正常工作。 但是我的Web服务器也有Web套接字连接。 而且,如果其他人更改了该模型,则每个人都应更新此模型,但是在这种情况下,他们不需要将请求发送到服务器:
socket.on('change', function(newValue) {
$scope.a = newValue;
$scope.$apply();
});
如何侦听仅从HTML表单(ng-model指令)发生的模型更改?
使用ng-change
指令:
<form>
<input ng-model="a" ng-change="sendSaveRequest(a)"/>
</form>
$scope.sendSaveRequest = sendSaveRequest;
仅当输入值的更改导致将新值提交给模型时才评估ngChange
表达式。
不会被评估:
有关更多信息,请参见《 AngularJS ng-change Directive API Reference》 。
当模型值更改时,模板正在更新。当模板值更改时,它将立即写入控制台。
ng-model
指令的示例链接: http : //jsfiddle.net/BtrZH/168/
您只需将套接字更改从摘要循环中取出,如下所示。 在这种情况下,不会调用监视程序,因此不会调用服务器。
socket.on('change', function(newValue) {
setTimeout(function() {
$scope.a = newValue;
}, 1000);
});
您可以在输入中使用Angular的ng-blur指令,而不是在控制器中添加手表。
在HTML中:
<input ng-model="a" ng-blur="onBlur()"/>
仅在用户在表单上手动更改值之后,才会调用$ scope.ngBlur函数(定义如下)。 以编程方式更改值(即$ scope.a = newValue;)将不会调用该函数。
在控制器中:
$scope.a = '';
$scope.oldValue = $scope.a;
$scope.onBlur = function() {
if ($scope.a !== $scope.oldValue) {
$scope.oldValue = $scope.a;
console.log('Request sending with value: ' + $scope.a);
sendSaveRequest($scope.a);
}
};
socket.on('change', function(newValue) {
$scope.a = newValue;
$scope.$apply();
});
在这里,您可以找到塞子: http ://plnkr.co/edit/iczEWILyp5y0QuZBML80。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.