AngularJS - 동적 $StateProvider
-
20-12-2019 - |
문제
저는 역동적인 $StateProvider를 만들기 위해 열심히 노력하고 있습니다.
표준 정적 $StateProvider:
$stateProvider
.state('main',
{
url: '/',
templateUrl: '/views/main.html',
controller: 'MainCtrl'
})
.state('login',
{
templateUrl: '/views/login-form.html',
controller: 'LoginCtrl'
})
.state('logout',
{
controller: 'LogoutCtrl'
})
.state('sales', {
templateUrl: '/views/sales-data.html',
controller: 'SalesDataCtrl',
resolve: {
user: 'User',
authenticationRequired: function(user) {
user.isAuthenticated();
}
}
});
동적 $StateProvider:
var verify = function(user) { user.isAuthenticated(); };
var states= [
{ name: 'main', url: '/', templateUrl: '/views/main.html', controller: 'MainCtrl' },
{ name: 'login', url: '', templateUrl: '/views/login-form.html', controller: 'LoginCtrl' },
{ name: 'logout', url: '', templateUrl: '', controller: 'LogoutCtrl' },
{
name: 'sales',
url: '',
templateUrl: '/views/sales-data.html',
controller: 'SalesDataCtrl',
//resolve:
//[
// { user: 'User', authenticationRequired: 'verify();' }
//]
}
];
// w/o the array brackets in resolve the navigation does not work.
// with the array brackets, once sales is clicked I get:
// Error: [ng:areq] Argument 'fn' is not a function, got Object
해결을 사용하지 않는 한 아래 두 가지 방법이 작동합니다.
This works:
angular.forEach(states, function(state) {
$stateProvider.state(state);
});
This works:
angular.forEach(states, function(state) {
$stateProvider.state(state.name, state);
});
질문: 이 동적 $StateProvider가 해결과 함께 작동하도록 하려면 어떻게 해야 합니까?
해결책
솔루션 :
var states = [
{ name: 'main', url: '/', templateUrl: '/views/main.html', controller: 'MainCtrl' },
{ name: 'login', url: '', templateUrl: '/views/login-form.html', controller: 'LoginCtrl' },
{ name: 'logout', url: '', templateUrl: '', controller: 'LogoutCtrl' },
{
name: 'sales',
url: '',
templateUrl: '/views/sales-data.html',
controller: 'SalesDataCtrl',
resolve: {
user: 'User',
authenticationRequired:
['user', function(user) { user.isAuthenticated(); }] // <-------------------------
}
}
];
angular.forEach(states, function (state) {
$stateProvider.state(state.name, state);
});
. 다른 팁
전화하시는 것 같아요 $stateProvider.state(...)
부정확하게는 상태 ID를 취한 다음 구성 객체를 취합니다.
당신의 가정 name
속성이 유효하고 고유하므로 이 작업을 수행하거나 필요에 따라 조정할 수 있어야 합니다.
angular.forEach(states, function(state) {
$stateProvider.state(state.name, state);
});
제휴하지 않습니다 StackOverflow