Да, это возможно.
- Использование $ stateChangeSuccess :
Вы можете использовать $ stateChangeSuccess для достиженияthis.
Например:
.state('main.parent', {
url: '/parent',
controller: 'ParentController',
controllerAs: 'vm',
templateUrl: 'app/parent.html',
data: {
title: 'Parent'
}
})
.state('main.parent.child', {
url: '/child',
controller: 'ChildController',
controllerAs: 'vm',
templateUrl: 'app/child.html'
})
И в runblock вызовите его следующим образом:
$rootScope.$on('$stateChangeSuccess', function (event, toState, fromState) {
var current = $state.$current;
if (current.data.hasOwnProperty('title')) {
$rootScope.title = current.data.title;
} else if(current.parent && current.parent.data.hasOwnProperty('title')) {
$rootScope.title = current.parent.data.title;
} else {
$rootScope.title = null;
}
});
Затем вы можете получить доступ к $ rootScope.title от дочернего элемента.контроллер, так как он доступен во всем мире.
Использование
Фабрика или Сервис :
Записывая сеттеры и геттеры, вы можете передавать данные между контроллерами.Таким образом, вы можете установить данные из дочернего контроллера и получить данные из родительского контроллера.
'use strict';
(function () {
var storeService = function () {
//Getters and Setters to keep the values in session
var headInfo = [];
return {
setData: function (key, data) {
headInfo[key] = data;
},
getData: function (key) {
return headInfo[key];
}
};
};
angular.module('MyApp')
.factory('StoreService', storeService);
})(angular);
Установить данные из дочернего контроллера
StoreService.setData('title', $scope.title)
Получить данные
StoreService.getData('title');
Использование событий $ emit, $ on :
Вы можете передать значение области из дочернего контроллера и прослушать его в родительской области.