Angularjs 角ui路由器共享状态
我有几个州是这样建立的:Angularjs 角ui路由器共享状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有几个州是这样建立的: $stateProvider.state('accounts', { url: "/accounts", templateUrl: 'tpl/accounts/index.html', }).state('accounts.view', { url: "/{accountNumber:[A-Z]{3}[0-9]{3,7}}", views: { '@': { templateUrl: 'tpl/ac
$stateProvider.state('accounts', {
url: "/accounts",
templateUrl: 'tpl/accounts/index.html',
}).state('accounts.view', {
url: "/{accountNumber:[A-Z]{3}[0-9]{3,7}}",
views: {
'@': {
templateUrl: 'tpl/accounts/view.html',
controller: 'AccountController',
controllerAs: 'controller'
}
},
resolve: {
account: ['$stateParams', 'AccountService', function ($stateParams, accountService) {
return accountService.get($stateParams.accountNumber);
}]
}
}).state('accounts.create', {
url: '/create',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
},
params: {
account: null
},
resolve: {
account: ['$stateParams', 'AccountProvider', function ($stateParams, provider) {
return $stateParams.account || provider.newAccount();
}]
}
}).state('accounts.view.edit', {
url: '/edit',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.view.edit.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.create.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
一切都很好。
现在我需要为create和edit创建一些子状态。它们将使用相同的视图和控制器,但我想知道是否可以使用相同的状态。
例如,我将设置一个地址状态,如下所示:
$stateProvider.state('accounts', {
url: "/accounts",
templateUrl: 'tpl/accounts/index.html',
}).state('accounts.view', {
url: "/{accountNumber:[A-Z]{3}[0-9]{3,7}}",
views: {
'@': {
templateUrl: 'tpl/accounts/view.html',
controller: 'AccountController',
controllerAs: 'controller'
}
},
resolve: {
account: ['$stateParams', 'AccountService', function ($stateParams, accountService) {
return accountService.get($stateParams.accountNumber);
}]
}
}).state('accounts.create', {
url: '/create',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
},
params: {
account: null
},
resolve: {
account: ['$stateParams', 'AccountProvider', function ($stateParams, provider) {
return $stateParams.account || provider.newAccount();
}]
}
}).state('accounts.view.edit', {
url: '/edit',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.view.edit.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.create.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
我将为创建状态设置另一个,如下所示:
$stateProvider.state('accounts', {
url: "/accounts",
templateUrl: 'tpl/accounts/index.html',
}).state('accounts.view', {
url: "/{accountNumber:[A-Z]{3}[0-9]{3,7}}",
views: {
'@': {
templateUrl: 'tpl/accounts/view.html',
controller: 'AccountController',
controllerAs: 'controller'
}
},
resolve: {
account: ['$stateParams', 'AccountService', function ($stateParams, accountService) {
return accountService.get($stateParams.accountNumber);
}]
}
}).state('accounts.create', {
url: '/create',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
},
params: {
account: null
},
resolve: {
account: ['$stateParams', 'AccountProvider', function ($stateParams, provider) {
return $stateParams.account || provider.newAccount();
}]
}
}).state('accounts.view.edit', {
url: '/edit',
views: {
'@': {
templateUrl: 'tpl/accounts/save.html',
controller: 'AccountSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.view.edit.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
.state('accounts.create.address', {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
对于一个孩子的州来说,这不是一个问题,但还有4个孩子的州,我只是想问一下,是否有办法分享这些州,比如:
.state(['accounts.create.address','accounts.view.edit.address'], {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
})
您可以将状态配置放在变量中
var sharedState = {
url: '/address',
views: {
'@': {
templateUrl: 'tpl/accounts/save/address.html',
controller: 'AccountAddressSaveController',
controllerAs: 'controller'
}
}
}
然后简单地做
.state('accounts.create.address', sharedState)
.state('accounts.view.edit.address', sharedState)
我会使用
angular.extend({},sharedState)
或Object.assign({},sharedState)