我的$watch
未更新对模型所做的每项更改......
我在我的控制器中:
$scope.JobsLeft = ProductRepository.Model.JobsLeft;
在我的存储库(工厂)中,我通过递减数字来更改JobsLeft ...
这是我的存储库内容:
var ViewModel = function()
{
return {
Products: [],
PageCount: [],
JobsLeft: 0
};
}();
function JobLoaded()
{
ViewModel.JobsLeft--;
alert( ViewModel.JobsLeft );
}
return {
Model: ViewModel,
...
一旦完成,就会在存储库函数中调用JobLoaded()。
我的控制器中有一块手表可以监视上面的内容:
$scope.$watch( "JobsLeft" , function(){
alert( "Doesn't fire when ProductRepository.Model.JobsLeft changes" );
if( $scope.JobsLeft <= 0 )
{
$( ".pagination-loading" ).hide();
}
}, true );
任何想法我可能做错了什么?
答案 0 :(得分:2)
您正在观看整数的实例。如果你的watch语句在实际的ViewModel上,那就可以了。
或者,您可以将“JobsLeft”变量设为对象 - 如下所示:
return {
Products: [],
PageCount: [],
JobsLeft: { value: 0 }
};
然后,当你写
$scope.JobsLeft = ProductRepository.Model.JobsLeft;
作用域的JobsLeft是对ViewModel中相同对象的引用,并且watch语句应该在写入时起作用:
$scope.$watch( "JobsLeft.value" , function(){
alert( "Doesn't fire when ProductRepository.Model.JobsLeft changes" );
if( $scope.JobsLeft.value <= 0 )
{
$( ".pagination-loading" ).hide();
}
}, true );
不要忘记更改编辑JobsLeft的方式:
function JobLoaded()
{
ViewModel.JobsLeft.value--;
alert( ViewModel.JobsLeft.value );
}
作为旁注,将变量放入范围本身通常是一种不好的做法。通常最好将控制器用于这样的事情。