【问题标题】:Can we call the function inside the controller from another controller of another file in AngularJS?我们可以从AngularJS中另一个文件的另一个控制器调用控制器内部的函数吗?
【发布时间】: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 肯定可以工作。不知道为什么没有。它们属于同一个模块吗?
  • $emit emits it UP, to parents,在你的情况下只能是全局范围 - $rootScope,所以你需要用$rootScope.$emit("myEvent")传输它并用$rootScope.$on监听。
  • 这几乎可以肯定意味着您的代码结构不佳。尝试退后一步,将代码拆分成更小的逻辑组件。

标签: javascript angularjs


【解决方案1】:

为了进行广播发射数据传输,必须满足以下条件

事件将从父控制器广播,并且 事件将从子控制器监听。广播方法 ID 用于将数据从父级传输到子级。

如果此层级不起作用,您可以通过services传输数据。

【讨论】:

  • 我没有这个层次结构,这两个是完全独立的控制器。我该怎么办?
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多