我试图在带有角度$ watch和工厂的控制器之间发送一些变量。它工作得很好但是我试图能够发送错误消息,如果用户试图添加相同的东西两次。通过它现在的工作方式 - 用户必须关闭该值并返回到它以发送错误消息。我相信这是因为它有一个关于功能的手表,并且设置功能正在发送相同的变量,所以它在技术上没有变化,因此手表没有触发 - 让我告诉你我的意思。
我的工厂看起来像这样 -
.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函数每次都要触发,即使发送的变量是相同的。或者我可能需要以不同的方式处理这个问题?输入将非常感激。谢谢你的阅读!
答案 0 :(得分:0)
你必须复制值才能像这样触发$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;
}
};
})