2017-01-20 2 views
1

Так у меня есть несколько других состояний, вот так:углового UI-маршрутизатор доля государства

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

и все работает отлично. Теперь мне нужно создать некоторые дочерние состояния для create и Редактировать. Они будут использовать один и тот же вид и контроллеры, но мне было интересно, могу ли я использовать одно и то же состояние. Например, я буду настройке адреса состояния, которое будет выглядеть примерно так:

.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' 
     } 
    } 
}) 

Это ISN это вопрос для этого для одного ребенка, но есть еще 4 человека, и я просто подумал, что спрошу, есть ли способ разделить государства, например, возможно:

.state(['accounts.create.address','accounts.view.edit.address'], { 
    url: '/address', 
    views: { 
     '@': { 
      templateUrl: 'tpl/accounts/save/address.html', 
      controller: 'AccountAddressSaveController', 
      controllerAs: 'controller' 
     } 
    } 
}) 

ответ

1

Вы можете поставить состояние конфигурации в переменной

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) 
+0

Я хотел бы сделать неполную копию для каждого из них с помощью 'angular.extend ({}, sharedState)' или 'Object.assign ({}, sharedState)' –

Смежные вопросы