2013-12-12 2 views
9

私は状態のように定義している:その状態で、私は、パラメータを変更したい、マウスのクリックに反応するとparamsだけが変更された場合、角度ui-routerが状態のテンプレートとコントローラをリロードするのを停止しますか?

.state("root.home.foo", { 
    url: "/foo/:id", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl' 
}) 

...

$state.go('root.home.foo', { id: newId }); 

しかし、私はそれとして、ちらつきを取得しています状態のテンプレートを再ロードし、コントローラを再作成します。コントローラを再作成しないようにすることはできますか?それは$stateChangeSuccessイベントに応答することができ、それだけで十分です。ジェイソンさんの提案に続き

更新

、私はサブ状態を試してみました。できます。

.state("root.home.foo", { 
    abstract: true, 
    url: "/foo", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl' 
}) 
.state("root.home.foo.itemSelected", {   
    url: "/:foo" 
}) 

$stateChangeSuccessイベントに聞く...

// In controller's constructor 
$scope.$on('$stateChangeSuccess', function (e, to, toParams, from, fromParams) { 
    if ($state.current.name == 'root.home.foo.itemSelected') {  
    handleSelection(toParams.id); 
    } 
}); 
+1

状態をネストできますか? "root.home.foo.stuffThatChangesWithId"それから、idで変わるものだけが 'ちらつき'しなければならないでしょう。それはおそらく変わるからです。場所が散らばっている場合は、名前付きビューを使用することもできます。 – Jason

+0

別の考え。この問題を回避するには、$ locationサービスを使用してアドレスを手動で変更し、手動でパラメータを手動で変更して、すべてを同期させるようにしますか?それがstateChangeをトリガーするかどうかはわかりません。 – Jason

+0

ありがとう、私はその最初の提案を試し、後で更新します。 –

答えて

1

ルートの定義にreloadOnSearch: falseを設定してみてください。例:

.state("root.home.foo", { 
    url: "/foo/:id", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl', 
    reloadOnSearch: false 
}) 
関連する問題