Javascript 角度$watch-设置为相同变量时无法启动手表
我试图在angular的$watch控制器和工厂之间发送一些变量。它工作得很好,但是如果用户尝试添加相同的内容两次,我会尝试发送一条错误消息。按照现在的工作方式,用户必须关闭该值并返回该值以发送错误消息。我相信这是因为它在函数上有一个手表,而set函数发送相同的变量,所以从技术上讲它不会改变,所以手表不会触发-让我告诉你我的意思 我的工厂看起来是这样的-Javascript 角度$watch-设置为相同变量时无法启动手表,javascript,angularjs,Javascript,Angularjs,我试图在angular的$watch控制器和工厂之间发送一些变量。它工作得很好,但是如果用户尝试添加相同的内容两次,我会尝试发送一条错误消息。按照现在的工作方式,用户必须关闭该值并返回该值以发送错误消息。我相信这是因为它在函数上有一个手表,而set函数发送相同的变量,所以从技术上讲它不会改变,所以手表不会触发-让我告诉你我的意思 我的工厂看起来是这样的- .service("multiPromptFactory",function(){ var msg = ""; var msg2 = "";
.service("multiPromptFactory",function(){
var msg = "";
var msg2 = "";
return {
setType: function(x) {
msg=x;
},
getType: function() {
return msg;
},
setFading: function(y) {
msg2=y;
},
getFading: function() {
return msg2;
}
};
})
因此,在一个控制器中,我设置了以下值-
multiPromptFactory.setType(item);
在另一个控制器中,我听工厂的声音,就像这样-
$scope.$watch(multiPromptFactory.getType,function(typeHere){
//add new prompt type when this fires
$scope.storeTempName = typeHere;
var addBlock= true;
for (var i=0; i<$scope.blocksHere.length; i++){
if($scope.blocksHere[i].typeId == $scope.storeTempName.id){
//already exists - fire warning for user
addBlock= false;
}
}
if(addBlock){
//doesn't exist yet, allow user to add
}
});
这非常有效,但是我想在用户发送相同的值时发送一条错误消息——如果变量从未更改,即使再次发送,watch似乎也不会触发。我想知道是否有某种方法可以让watch函数每次都启动,即使发送的变量是相同的。或者我只是需要换一种方式?如能提供意见,将不胜感激。谢谢你的阅读 您必须复制value才能像这样启动$watch:
.service("multiPromptFactory",function(){
var msg = "";
var msg2 = "";
return {
setType: function(x) {
msg=x;
},
getType: function() {
return angular.copy(msg);
},
setFading: function(y) {
msg2=y;
},
getFading: function() {
return msg2;
}
};
})
这将导致手表在每一个摘要周期中启动。可能是,也可能不是OP想要的,而且,还有一种更简单的方法:只需$scope.$watchfunction{…whatever…}$作用域。$watchfunction{…无论如何…};但这将跟踪范围中的所有更改,对吗?我认为,如果您的代码需要在更改时使用相同的值,那么您最好重写它