当我在同一个屏幕上对主控制器进行更改时,我正在尝试取消选中右列上有一个单独控制器的复选框。这两个控制器是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>
任何人都可以告诉我我做错了什么或建议更好的方法。 感谢
答案 0 :(得分:1)
我自己解决了这个问题,所以如果有人遇到类似问题,那么这就是答案。
首先,问题并不直接在$ emit和$ on函数中,而是在$ rootScope的值中。
ui-element采用布尔值true
和false
,因为我使用布尔值1
和0
,因为它们是如何形成的存储在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);
现在,兄弟控制器的所有内容都很好。