【发布时间】:2018-04-09 14:32:01
【问题描述】:
我试图在一个控制器中调用一个函数,该控制器位于另一个 js 文件中的另一个控制器中。
我尝试过$broadcast 和$emit,但我认为它只能在同一个文件中工作。
我有一个名为videoWidgetController 的控制器,它的函数名为clickVideoWidgetListItemFromDOM。
我需要从另一个名为 videoController 的控制器调用它。
在这个文件中,我在点击事件上调用函数,比如data-ng-click="clickVideoWidgetListItemFromDOM(video, $index)"
视频控制器
$scope.clickVideoWidgetListItem = function(video, index) {
$scope.$emit("myEvent"); *** didn't work for me ***
$rootScope.$broadcast("myEvent", {video: video,index: index }); *** didn't work for me ***
};
videoWidgetController
$scope.$on("myEvent", function (event, args) {
alert(1);
console.log(args);
$scope.clickVideoWidgetListItemFromDOM();
});
我按照this link 中的说明进行了尝试,但无法得到解决方案。
我搜索了很多,但不幸的是仍然遇到同样的问题。
【问题讨论】:
-
为什么不把两个控制器的公共部分分解到另一个文件中?
-
$rootScope.$broadcast 肯定可以工作。不知道为什么没有。它们属于同一个模块吗?
-
$emitemits it UP, to parents,在你的情况下只能是全局范围 -$rootScope,所以你需要用$rootScope.$emit("myEvent")传输它并用$rootScope.$on监听。 -
这几乎可以肯定意味着您的代码结构不佳。尝试退后一步,将代码拆分成更小的逻辑组件。
标签: javascript angularjs