如何在Angular js中的其他控制器中调用/触发一个控制器功能

时间:2016-02-25 09:23:03

标签: javascript html angularjs

<div ng-app="myApp">
  <div ng-controller="FirstController">
     //In this controller i am having one insert Functionality on ng-click
  </div>
  <div ng-controller="secondController">
    //In this controller i am having one insert Functionality on ng-click
  </div>
  <div ng-controller="FinalController">
   //Here on ng-click i want to trigger all the other controller's click events
  </div>
</div>

实际上我正在构建一个角度js应用程序,其中我有不同的部分,用户可以保存他输入的数据,因此这里的每个控制器都表现为单个实体并按下每个按钮点击执行粗略操作控制器。 现在,在每个控制器中都有ng-click实现的插入功能,可将数据发送到表中。在最终控制器中有一个保存按钮,我们需要触发不同控制器的所有插入点击,如何实现这一点,任何快速建议都是值得赞赏的。

4 个答案:

答案 0 :(得分:1)

您可以使用$ rootScope。将$ rootScope注入所有控制器,然后从finalcontroller向其他控制器发出一个事件,如

在最终控制器中

$rootScope.$emit('triggerClick'); // when you want to trigger click in other controllers

在firstController和secondController

$scope.yourFunction = function(){     //This will be executed on ng-click
    // InsertFunction code
}

$rootScope.$on('triggerClick', function() {      // this will be executed when you trigger from finalController
    // InsertFunction code
})

答案 1 :(得分:0)

您应该使用事件在angularjs应用程序中的模块之间进行通信/在这种情况下控制器。这是正确的方法。

即使用$on, $broadcast and $emit.

Emmiter

function someFunction(){// your buttonclick or whatever you want to sstart communication with
  $rootScope.$broadcast('eventName',{data: 100});//this should be remembered
}

接收机

$rootScope.$on('eventName', function(event,args){// and here is why
  // acces with args.data
})

看看这个post,除了正确的答案之外,答案也很好地适用于通信黑白应用程序组件的方法。

答案 2 :(得分:0)

您需要从最终控制器广播消息,并在其他控制器中对其进行操作。

FinalController

function trigger(){
  $rootScope.$broadcast('yourEventName');
}

FirstController

$rootScope.$on('yourEventName', function(){
  //do your insert functionality
})

答案 3 :(得分:0)

如果要触发其他控制器操作,则必须使用服务。

在服务中实现触发器操作,然后将其注入另一个控制器。

这是&#34;最佳实践&#34;这样做的方法。