Angular,在发送相同信息时要注意

时间:2014-12-09 18:40:36

标签: javascript angularjs

所以我看了一个工厂,当它收到相同的价值时不会开火,我知道它会像这样工作,但我想知道是否有任何解决方法?

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

工厂 -

.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中发送相同的对象,手表将不会触发。有没有合理的方法可以解决这个问题?谢谢你的阅读!

1 个答案:

答案 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中,但你可以在任何你想让你的范围知道模态已被打开的地方使用它。