2017-01-20 1 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' 
     } 
    } 
}) 

을하고 모두 잘 작동합니다. 이제는 에 대한 자식 상태를 만들고을 편집으로 만들 필요가 있습니다. 그들은 같은 뷰와 컨트롤러를 사용할 것이지만 동일한 상태를 사용할 수 있는지 궁금합니다. 예를 들어 , 내가 이런 걸 볼 것이다 주소 상태를 설정됩니다

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

그것은 외설 한 자녀 상태에서이 일을하는 데 문제가되지는 않지만 다른 네 가지가 있습니다. 아마도 저는 주를 공유 할 수있는 방법이 있는지 묻습니다.

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

답변

1

당신은`

.state('accounts.create.address', sharedState) 
.state('accounts.view.edit.address', sharedState) 
+0

내가'angular.extend ({}, SharedState입니다)를 사용하여 각각에 대해 얕은 복사본을 만드는 것, 변수 다음

var sharedState = { url: '/address', views: { '@': { templateUrl: 'tpl/accounts/save/address.html', controller: 'AccountAddressSaveController', controllerAs: 'controller' } } } 

간단하게 할 당신의 국가 설정을 넣을 수 있습니다 또는'Object.assign ({}, sharedState)' –

관련 문제