要解释该问题,请查看以下内容states
:
.state('app.play.lobby', {
url: '/lobby',
resolve: {
games: function (FirebaseAdapter) {
return FirebaseAdapter
.syncArray('disciplines')
.$loaded()
.then(function (list) {
return list;
});
},
tournaments: function (FirebaseAdapter) {
return FirebaseAdapter
.syncArray('tournaments')
.$loaded()
.then(function (list) {
return list;
});
}
},
views: {
filter: {
templateUrl: 'play/lobby/filter.tpl.html',
controller: LobbyFilterController
},
browser: {
templateUrl: 'play/lobby/browser.tpl.html',
controller: LobbyBrowserController
}
}
});
一切正常。问题是:在控制器中,LobbyFilterController
我$scope.$watch()
用于侦听对象的更改。但是仅在状态成功加载后才触发该$watch()
命令一次。加载状态并更改对象内部的属性值后,什么也不会发生。
LobbyFilterController
function LobbyFilterController($scope, games, TournamentFilter) {
$scope.filter = {
game: null,
mode: 'regular',
type: 'all',
format: 'all',
eliminationMode: 'all',
gridsize: 'all',
status: 'all',
groupstage: false,
reshuffledGrid: false,
password: false
};
$scope.$watch($scope.filter, function(data) {
console.log('filter changed...');
}, true);
}
当我尝试使用$ scope.myVar这样的普通值时,此行为不会改变。由于事件在加载后触发一次,所以我想我没有记错(希望我记错了)吗?
您需要提供监视属性(或监视表达式)作为字符串或返回值的函数表达式。相反,您正在设置一个对象。尝试将其更改为:
$scope.$watch('filter', function(data) {
console.log('filter changed...');
}, true);
$ watch用于从提供的表达式中$parse
创建一个吸气剂。您提供的是一个对象作为表达式,由于它仅查找字符串或函数,因此将被忽略。从源头上查看案例陈述。并且所有观察者都将至少触发一次以在摘要周期中启动脏检查(在您的情况下也会发生这种情况),并且如果您在第一次执行中查找参数,您会发现两个值都是未定义的,因为没有真正观察到任何东西否则观察者将始终返回undefined
带有重写的angular.noop函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句