我正在尝试使用 $watch 来实现它。 $watch 主体在页面初始化时触发(在 newValue 中未定义),并且在单击“btnChangeIsLoggedIn”时不触发。
<!DOCTYPE html>
<html data-ng-app="myApp">
<head><title>title</title></head>
<body>
<script src="lib/angular/angular.js"></script>
<div ng-controller="ctrl1">
<input type="text" ng-model="isLoggedIn" />
<input type="button" id="btnChangeIsLoggedIn"
value="change logged in" ng-click="change()" />
</div>
<script>
var myApp = angular.module('myApp', []);
myApp.service('authService', function () {
this.isLoggedIn = false;
});
myApp.controller('ctrl1', function ($scope, authService) {
$scope.isLoggedIn = authService.isLoggedIn;
$scope.$watch("authService.isLoggedIn", function (newValue) {
alert("isLoggedIn changed to " + newValue);
}, true);
$scope.change = function() {
authService.isLoggedIn = true;
};
});
</script>
</body>
</html>
我做错了什么?
我在 JSFiddle 的代码:
http://jsfiddle.net/googman/RA2j7/ http://jsfiddle.net/googman/RA2j7/
您可以传递一个函数,该函数将返回服务方法的值。然后 Angular 会将其与之前的值进行比较。
$scope.$watch(function(){
return authService.isLoggedIn;
}, function (newValue) {
alert("isLoggedIn changed to " + newValue);
});
Demo: http://jsfiddle.net/TheSharpieOne/RA2j7/2/ http://jsfiddle.net/TheSharpieOne/RA2j7/2/
注意:文本字段值未更新的原因是该按钮仅更改服务的值,而不更改服务的值$scope
您还可以摆脱初始警报(运行更改功能),但比较newValue
到 oldValue 并且仅在它们不同时才执行语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)