调用超出当前控制器范围的过滤器

时间:2015-02-20 16:04:52

标签: angularjs

好的,我有一个名为LinesCtrl的控制器,它在body的{​​{1}}中显示一些数据,我有另一个名为html的控制器,它是控制器对于MenuControllernavbar我有一个属于navbar

的搜索栏(input type=search
LinesCtrl

如上所示,<nav class="navbar" ng-controller="MenuController" ng-show="displayLogout"> <div class="navbar-form"> <!--this is the input which must be attached to LinesCtrl--> <div class="form-group"> <input type="search" ng-model="search"/> </div> <div class="form-group"> <button type="button">Account Figures</button> <button type="button">Log out</button> </div> </div> </div> </nav> 中有一个inputform-group属于input,因为我在LinesCtrl内在MenuController中,html(过滤器​​)根本不起作用,那么,我有哪些选项?

有人建议我使用inputbroadcast

让我粘贴我想要彼此沟通的控制器的代码

emit

一个是包裹angular.module('myApp.controllers') .controller('MenuController', function($scope, $location) { $scope.displayLogout = false; AuthFactory.getCustomer().then(function(customer) { $scope.displayLogout = true; }); $scope.$on('loginController:loggedIn', function() { $scope.displayLogout = true; }); $scope.$on('loginController:loggedOut', function() { $scope.displayLogout = false; }); $scope.logout = function() { AuthFactory.logout(); AuthFactory.broadcastLogout(); $scope.displayLogout = false; }; }); 的控制器,因此一旦用户注销,navbar就会消失。这没关系,我的问题是,navbar属于另一个控制器,所以一旦你试着找东西就行不通。

input

那么我如何使用angular.module('myApp.controllers', []) .controller('LinesCtrl', function($scope) { .... }); emit但使用broadcast

1 个答案:

答案 0 :(得分:1)

我自己的回答:

<强> menuController

angular.module('myApp.controllers')
  .controller('MenuController', function($scope, $location) {
    $scope.broadcastSearchBar = function() {
       $rootScope.$emit('menuController:searching', $scope.search);
    };
  });

<强> HTML

          <input ng-change="broadcastSearchBar()"
                 type="search"
                 ng-model="search"/>

<强> linesCtrl

$rootScope.$on('menuController:searching', function($event, searchArg) {
  $scope.search = searchArg;
});