2017-02-07 7 views
0

を変更したときに、私は基本アプリのUIルータの状態でアプリを持って決意を再ロードからUI-ルータを停止する...方法のparamsは

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    views: obj 
}); 

そしてchildgrand-child状態...

$stateProvider.state('app.wizardchild', { 
    parent: 'app', 
    url: '/wizard', 
    resolve: { 
    wizard: ['wizard',function(wizard) { 
     return new wizard(); 
    }], 
    }, 

$stateProvider.state('app.wizardgrandchild', { 
     parent: 'app.wizardchild' 
    } 

私は... app.wizardchild

から

$state.go('app.wizardgrandchild')

期待どおりに動作し、ウィザードは一度だけ解決されました。

しかし、私はそれはapp.wizardchild

から$state.go('app.wizardgrandchild', {param:'blah'})を行う際grand-child状態で、ウィザードの新しいコピーを有することを意味する決意ブロックを再実行します。しかし、私はそれが起こることを望んでいない、私はそれが同じであり、別のコピーが作成されていないようにします。この動作をオフにする方法はありますか?

答えて

0

wizardをサービス(工場ではなく)として登録してください。すべてのAngularサービスはシングルトンなので、問題を解決するはずです。今、あなたはnewを使用して、ウィザードの新しいインスタンスを作成するたびに - あなたがサービスを使用する場合は角度が自動的にインスタンスを作成し、それをこれは必須ですたびに(同じインスタンスが注入されるたびに)注入します

0

はあなたのparamappに宣言されています状態。状態のパラメータが変更されると、新しいパラメータ値を使用して再ロードされます。状態がリロードされると、そのすべての子もリロードされます。

パラメータ宣言を孫の状態に移動することができれば、問題は解決します。

また、paramをアプリの状態に、mark it as dynamicをそのまま使用することができます。動的パラメータによって状態がリロードされることはありません。

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    params: { param: { dynamic: true } }, 
    views: obj 
}); 

あなたはUI-ルータのレガシー(0.xで)、似ていますが、バグができthere is reloadOnSearchを使用している場合。

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    reloadOnSearch: false, 
    views: obj 
}); 
関連する問題