所以我看了一个工厂,当它收到相同的价值时不会开火,我知道它会像这样工作,但我想知道是否有任何解决方法?
我有一个工厂发送模态信息,用户可以关闭当前模态并想重新打开它。
工厂 -
.factory('themeFactory', function () {
// Service logic
var x = "no";
return {
setModal: function (modal) {
x = modal;
},
getModal: function(){
return x;
}
};
});
手表 -
$scope.$watch(themeFactory.getModal, function (newModal) {
if(newModal != "no"){
$scope.modalOpen = true;
$scope.modalInfo = newModal;
}else{}
});
如此直截了当,如果用户在setModal中发送相同的对象,手表将不会触发。有没有合理的方法可以解决这个问题?谢谢你的阅读!
答案 0 :(得分:1)
正如您所说,当价值发生变化时会触发手表。听起来你可以用事件来完成你的任务:
//Use $rootScope to $broadcast the event
.factory('themeFactory', function ($rootScope) {
// Service logic
var x = "no";
return {
setModal: function (modal) {
x = modal;
//broadcast event if not "no", your logic from $watch
$rootScope.$broadcast(this.modalOpened, modal);
},
getModal: function(){
return x;
},
//Defining an event name to broadcast
modalOpened: "themeFactory.modalOpened"
};
});
然后在你的控制器中(或你把手表放在哪里):
$scope.$on(themeFactory.modalOpened, function (e, modal) {
$scope.modalOpen = true;
$scope.modalInfo = modal;
});
在重新打开现有模式时,您没有提供足够的代码来显示调用的代码。我只是将$ broadcast放在setModal中,但你可以在任何你想让你的范围知道模态已被打开的地方使用它。