Если вы хотите, чтобы обмениваться данными между двумя контроллерами, вы можете использовать Service. Сервис - это синглтоны, поэтому вы можете легко делиться своими данными.
Однако вы хотите уведомить меня, когда вы изменили свои данные, поэтому для этого вам следует использовать метод $broadcast()
и $on()
.
$broadcast
: отправляет событие вниз для всех детей прицелов
Поскольку нет никакой родитель-ребенок связи между вашими областями, если ваши контроллеры находятся на тот же уровень, вы можете вводить $rootScope
в контроллер и транслировать событие на все дочерние области.
РЕДАКТИРОВАТЬ
есть пример с помощью службы и трансляцию параметра.
Так что вы можете сделать:
Контроллер
(function(){
function Controller($scope, $rootScope, Service) {
$scope.data = 1;
$scope.set = function(n){
$scope.data = n;
Service.set($scope.data);
$rootScope.$broadcast('set', $scope.data);
}
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();
(function(){
function Controller($scope, Service) {
$scope.$on('set', function(e, data){
$scope.data2 = Service.get();
$scope.data3 = data;
});
}
angular
.module('app')
.controller('ctrl2', Controller);
})();
Услуги
(function(){
function Service(){
var data;
function get(){
return data;
}
function set(value){
data = value;
}
return {
get: get,
set: set
};
}
angular
.module('app')
.factory('Service', Service);
})();
HTML
<body ng-app='app'>
<h3>Controller 1</h3>
<div ng-controller="ctrl">
<button ng-click="set(data)">change</button>
<input type="text" ng-model="data">
</div>
<h3>Controller 2</h3>
<div ng-controller="ctrl2">
<p>Data from controller 1 : {{data2}}</p>
<p>Data from controller 1 without service : {{data3}}</p>
</div>
</body>
Теперь вы сможете общаться между контроллерами разных типов и извлекать данные с помощью Сервиса.
Вы можете увидеть Plunker
Просто с помощью Service одноплодной
Контроллер
(function(){
function Controller($scope, Service) {
$scope.data = 1;
$scope.set = function(n){
Service.set(n)
}
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();
(function(){
function Controller($scope, Service) {
//Retrieve service instance
$scope.data_service = Service;
}
angular
.module('app')
.controller('ctrl2', Controller);
})();
HTML
<body ng-app='app'>
<h3>Controller 1</h3>
<div ng-controller="ctrl">
<button ng-click="set(data)">change</button>
<input type="text" ng-model="data">
</div>
<h3>Controller 2</h3>
<div ng-controller="ctrl2">
<p>Data from controller 1 : {{data_service.get()}}</p>
</div>
</body>
Здесь мы просто передаем экземпляр нашего Сервиса.
Вы можете увидеть Plunker with Service
есть смотреть на эту Http: // StackOverflow.com/вопросы/19446755/on-and-broadcast-in-angular –
@ A.T. Я предпочитаю услугу, чем использование $ rootcope. –
попробуйте это. http://stackoverflow.com/questions/11324202/creating-common-controller-functions надеюсь, что это помогает. –