我知道我不是第一个遇到这个问题的人,但是这里没有任何解决方案帮助我解决了这个问题。
我有两个控制器,一个ShowController和一个CreateController。我想从ShowController广播并在CreateCrontroller中接收。为此,我正在使用BroadcastService。一切都按预期工作。由于Click事件,ShowController将数据保存到服务广播事件,CreateController接收事件和数据。依赖于我想激活一个选项卡的数据,一个由CreateController启动的视图。在on-method中设置$ scope变量后,它们正在更改,但视图不会自行更新。
我试图在$ timestamp中包装$ broadcast以及$ on方法来强制$ apply。在设置了$ scope变量之后我也尝试了$ apply,并尝试在$ apply中的匿名函数中设置$ scope变量。这些解决方案不适用于我。我显然错过了一些东西。
修改
附件fiddle正在运行,但没有问题。两个控制器都有一个父控制器。如果我检查子控制器中的$scope
,则会添加新数据但是如果我检查父控制器,则$$childTail
子数据没有更改。所以广播有效。问题出在控制器结构或范围继承中。
为什么即使未在父控制器中启动和更改变量,视图也会侦听父控制器?
编辑2 至于我试图找到问题,我认为我发现了一个问题。如果我尝试从show controller广播到创建控制器。创建控制器尚未初始化。在我第二次尝试广播之后。但是视图中的变量仍然没有变化!请参阅此工作plnkr以分析问题。我尝试通过广播从节目更改变量到创建控制器。如果检查创建控制器中的作用域,则变量已更改,但在父作用域中则没有。
angular.module('module.service')
.factory('SharedFactory',['$rootScope', '$timeout', function ($rootScope, $timeout) {
var sharedService = {};
sharedService.message = '';
sharedService.data = {};
sharedService.prepForBroadcast = function(event, data) {
this.event = event;
this.data = data;
this.broadcastItem();
};
sharedService.broadcastItem = function() {
$timeout(function() {$rootScope.$broadcast('updateShared');});
};
return sharedService;
}]);
// controller 1
$scope.functionName = function(data) {
// tried this as well with and without the $timeout
$timeout(function() {
SharedFactory.prepForBroadcast('bookResources', {data:data});
}, 0);
// ui-router changes state / view
$timeout(function() {
$state.go('create');
}, 1);
};
// controller 2
$rootScope.$on('updateShared', function() {
// first attempt
$timeout(function() {
$scope.variable.data = SharedFactory.data; // updating in controller but not in view
}, 100);
// seconde attempt
$scope.$apply(function () {
$scope.variable.data = SharedFactory.data; // updating in controller but not in view
});
});
<ol>
<li data-ng-repeat="phase in array">
<span data-ng-repeat="com in phase.array">{{com.type}}
<span data-ng-click="functionName(phase)"> {{com.var1}}/{{com.var1}}
</span>
</span>
</li>
</ol>
答案 0 :(得分:-1)
angular.element(&#39; [纳克控制器= createController]&#39)。范围()