我想从一个控制器到另一个控制器上的$ broadcast和$

时间:2016-03-11 10:16:34

标签: angularjs

我需要以下代码的帮助。我想从page.js(控制器)到layout.js(控制器)的以下函数$ broadcast $。我该怎么办?感谢

      $scope.addToPage = function(page_id) {
        $state.go('builder', {
          page: page_id
        });
      };

3 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,但是,我认为这是一个坏主意。

如果你想在任何地方调用一个函数(任何视图,控制器,服务),你需要在$rootScope上声明它,因为$rootScopengApp实例的uniq(类似于Singletone):

angular
  .module('test', [])
  .run(function($rootScope) {
    $rootScope.sayHello = function() { alert('Hello'); };
  })
  .controller('AnywhereCtrl', function($scope, $rootScope) {
    $rootScope.sayHello();
  })
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<section ng-app="test">
  <button ng-click="sayHello($event)">Hello</button>
  
 <!--<div ng-controller="AnywhereCtrl"></div>-->

</section>

答案 1 :(得分:0)

为了更清楚,我有我的。

page.html中

<md-button ng-click="addToPage(page_id)">

page.js

  $scope.addToPage = function(page_id) {
    $state.go('builder', {
      page: page_id
    });
  };

!!!我不想修改layout.js只是为了将page.html / js的功能带到带有$ broadcast,$ on或$ emit的layout.html / js !!!

我有相同的按钮: 的layout.html

<md-button class="md-icon-button" ng-click="addToPage(page_id)">

答案 2 :(得分:0)

use $emit instead $broadcast and package the two function as a service

inject communicationservice to appcontroller to accept broadcast

broadcast something you want 所以,希望你能理解我所说的...........我的英语太差了 - --||