Угловой UI-маршрутизатор для выполнения условного вида
-
21-12-2019 - |
Вопрос
Я спрашиваю подобного вопроса к этому вопросу: UI маршрутизатор Условие пользовательских интернет-пользователей? , но моя ситуация немного сложнее, и я не могу получить предоставленный ответ на работу.
Вот то, что я в настоящее время пытаюсь
$stateProvider
.state('home', {
url : '/{id}',
resolve: {
entity: function($stateParams, RestService) {
return RestService.getEntity($stateParams.id);
}
},
template: 'Home Template <ui-view></ui-view>',
onEnter: function($state, entity) {
if (entity.Type == 'first') {
$state.transitionTo('home.first');
} else {
$state.transitionTo('home.second');
}
}
})
.state('home.first', {
url: '',
templateUrl: 'first.html',
controller: 'FirstController'
})
.state('home.second', {
url: '',
templateUrl: 'second.html',
controller: 'SecondController'
});
.
Решение
href="http://github.com/angular-ui/ui-router/wiki#templates"> templateurl может быть функцией, поэтому вы проверяете тип и вернемсяПросмотр и определите контроллер в представлении, а не как часть конфигурации состояния.Вы не можете вводить параметры templateURL, чтобы вы могли использовать TemplateProvider.
$stateProvider.state('home', {
templateProvider: ['$stateParams', 'restService' , function ($stateParams, restService) {
restService.getEntity($stateParams.id).then(function(entity) {
if (entity.Type == 'first') {
return '<div ng-include="first.html"></div>;
} else {
return '<div ng-include="second.html"></div>';
}
});
}]
})
. Другие советы
Вы также можете сделать следующее:
$stateProvider
.state('home', {
url : '/{id}',
resolve: {
entity: function($stateParams, RestService) {
return RestService.getEntity($stateParams.id);
}
},
template: 'Home Template <ui-view></ui-view>',
onEnter: function($state, entity) {
if (entity.Type == 'first') {
$timeout(function() {
$state.go('home.first');
}, 0);
} else {
$timeout(function() {
$state.go('home.second');
}, 0);
}
}
})
.state('home.first', {
url: '',
templateUrl: 'first.html',
controller: 'FirstController'
})
.state('home.second', {
url: '',
templateUrl: 'second.html',
controller: 'SecondController'
});
. Я оказался зарабатывать домашний контроллер брата первого и второго, а не родительского, а затем имел контроллер домой, делать $ State.go до первого или второго в зависимости от результатов разрешения.
$stateProvider.state('dashboard.home', {
url: '/dashboard',
controller: 'MainCtrl',
// templateUrl: $rootScope.active_admin_template,
templateProvider: ['$stateParams', '$templateRequest','$rootScope', function ($stateParams, templateRequest,$rootScope) {
var templateUrl ='';
if ($rootScope.current_user.role == 'MANAGER'){
templateUrl ='views/manager_portal/dashboard.html';
}else{
templateUrl ='views/dashboard/home.html';
}
return templateRequest(templateUrl);
}]
});
.