gpt4 book ai didi

javascript - Angular,发送相同信息时 watch 会触发

转载 作者:行者123 更新时间:2023-12-03 11:14:57 24 4
gpt4 key购买 nike

所以我在工厂有一 block watch ,当它收到相同的值时不会触发,我知道它应该像这样工作,但我想知道是否有任何解决办法?

我有一个发送模态信息的工厂,用户可能会关闭当前模态并想要重新打开它。

工厂 -

.factory('themeFactory', function () {
// Service logic
var x = "no";
return {
setModal: function (modal) {

x = modal;
},
getModal: function(){
return x;
}
};
});

watch -

$scope.$watch(themeFactory.getModal, function (newModal) { 
if(newModal != "no"){
$scope.modalOpen = true;
$scope.modalInfo = newModal;

}else{}

});

非常简单,如果用户在 setModal 中发送相同的对象, watch 将不会触发。有什么合理的方法可以解决这个问题吗?感谢您的阅读!

最佳答案

正如您所说,当值发生变化时会触发监视。听起来您可以使用事件来完成您的任务:

//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"
};
});

然后在您的 Controller 中(或您放置 watch 的任何位置):

$scope.$on(themeFactory.modalOpened, function (e, modal) {
$scope.modalOpen = true;
$scope.modalInfo = modal;
});

您没有提供足够的代码来显示重新打开现有模式时调用的代码。我只是将 $broadcast 放在 setModal 中,但是您可以在任何想要让范围知道模式已打开的地方使用它。

关于javascript - Angular,发送相同信息时 watch 会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com