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

それISN は例えば、私はこのようになりますアドレス状態を設定します1つの子供の状態でこれを行う問題はありませんが、他の4つがあります。私はちょうど、おそらく次のように州を共有する方法があるかどうか尋ねると思っていました。

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

関連する問題