Angular $ rootScope。$ emit和$ on不在兄弟控制器上工作

时间:2016-04-25 23:27:18

标签: angularjs

当我在同一个屏幕上对主控制器进行更改时,我正在尝试取消选中右列上有一个单独控制器的复选框。这两个控制器是ui-router层次结构中的兄弟姐妹。

我正在制作这样的活动

$rootScope.$emit('setReady', 0);

这在同一个控制器的更多地方使用,我想在每次执行时调用监听器。 这应该由按钮点击和文件上传等事件调用。

然后我正在听这样的事件

$rootScope.$on('setReady', function (event, data) {
    console.log(data);
    $scope.change.ready = data;
});

我可以让它工作(某种程度)但是当它工作时它只调用一次(第一次发生事件)然后看起来$ on on listener不再听了。页面刷新后,它将再次运行然后停止。 console.log(数据);每次都显示正确的0值。

应该切换这个ui元素(在这种情况下,在每个事件中都将其设为false)。

<a class="" ng-class="change.ready == 1 ? 'active':''" ui-toggle-class="" >
  <i class="fa fa-square-o text"></i>
  <span class="text">Mark as ready </span>
  <i class="fa fa-check-square-o text-active"></i>
  <span class="text-active">Marked as ready </span>
</a>

任何人都可以告诉我我做错了什么或建议更好的方法。 感谢

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题,所以如果有人遇到类似问题,那么这就是答案。

首先,问题并不直接在$ emit和$ on函数中,而是在$ rootScope的值中。

ui-element采用布尔值truefalse,因为我使用布尔值10,因为它们是如何形成的存储在MySQL中。

其次,$ scope需要在将更改作为值发送之前了解更改,因此此代码将添加到我的复选框ng-click函数中

$scope.change.ready = $scope.change.ready == false ? true : false;

将值发送到后端之前

$scope.change.ready == true ? 1 : 0

之后,这些功能可以像这样实现

$rootScope.$on('setReady', function (event, data) {
    $scope.change.ready = data;
});

$rootScope.$emit('setReady', false);

现在,兄弟控制器的所有内容都很好。