Вам нужно будет выполнить одно из следующего:
- Создайте контроллер для состояния и привяжите разрешенное значение к
$scope
.
- Привяжите ссылку
Auth.getCurrentUser()
к $rootScope
, чтобы она была доступна для каждого состояния.
Пример для подхода №1:
.state('route', {
url: '/route',
template: '<my-component user="user"></my-component>',
controller: ($scope, user) => { $scope.user = user; },
resolve: {
user: (Auth) => {
return Auth.getCurrentUser().$promise;
}
}
});
Пример для подхода № 2:
.run(($rootScope, Auth) => {
//This does NOT replace the resolve in your state definition but for this to work,
//Auth.getCurrentUser() must NEVER return null.
$rootScope.user = Auth.getCurrentUser();
});
Дальнейшее объяснение подхода № 2:
Каждый $scope
будет наследоваться от $rootScope
, поэтому, пока $rootScope.user
указывает на фактический объект, дочерние области будут указывать на тот же объект.
лучшей практикой, если вы решите использовать вариант 2, является привязка объекта пользователя к свойству определенного объекта на $rootScope
, чтобы избежать каких-либо проблем:
.run(($rootScope, Auth) => {
$rootScope.data = {
//Now user can be null.
user: Auth.getCurrentUser()
//Other shared data...
}
});
Но тогда вам придется обновить свой шаблон, чтобы использовать data.user
.
РЕДАКТИРОВАТЬ:
Я нашел этот пример в документах, может пролить немного света на проблему:
angular.module('myMod', ['ngRoute']);
.component('home', {
template: '<h1>Home</h1><p>Hello, {{ $ctrl.user.name }} !</p>',
bindings: {
user: '<'
}
})
.config(function($routeProvider) {
$routeProvider.when('/', {
//Notice $resolve?
template: '<home user="$resolve.user"></home>',
resolve: {
user: function($http) { return $http.get('...'); }
}
});
});
person
Muli Yulzary
schedule
16.08.2016