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'
        }
    }
})
一切都很好。 现在我需要为createedit创建一些子状态。它们将使用相同的视图和控制器,但我想知道是否可以使用相同的状态。 例如,我将设置一个地址状态,如下所示:

$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)