我正在编写一些代码并意识到angularjs1.5 +组件实际上并没有收到$scope.$broadcast
事件,意味着$scope.$on
永远不会在组件控制器函数中运行。
虽然我能够$emit
来自组件控制器的事件并由父控制器$on
接收,但它只是不监听广播事件。
广播:$scope.$broadcast('parentEvnt', [1,2,3]);
但 NOT 收到了组件:$scope.$on('parentEvnt', function(event, data){ \\
我创建了此plunker来显示问题。
搜索了一些文章以及SO,但没有找到任何答案,并尝试$rootScope.$broadcast
也没有帮助。
并且,如果不可能,那么从应用程序中的任何随机位置通知组件的最佳方法是什么?
答案 0 :(得分:2)
这里的问题是,即使在您的子控制器初始化并开始收听这些事件之前,您broadcast
也是$scope
。因此,使用$rootScope
或broadcast
到broadcast
是不是无关紧要:))
例如,我将$timeout
更改为$timeout(function() {
$rootScope.$broadcast('parentEvnt', [1,2,3]);
}, 2000);
内的2秒,它会按预期工作。
yourSlider.addTarget(self, action: #selector(sliderValueChanged), for: .valueChanged)
但是,理想情况下,您希望按下按钮或其他方案。