好的,我有一个名为LinesCtrl
的控制器,它在body
的{{1}}中显示一些数据,我有另一个名为html
的控制器,它是控制器对于MenuController
,navbar
我有一个属于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>
中有一个input
,form-group
属于input
,因为我在LinesCtrl
内在MenuController
中,html
(过滤器)根本不起作用,那么,我有哪些选项?
input
或broadcast
。
让我粘贴我想要彼此沟通的控制器的代码
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
?
答案 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;
});