web-dev-qa-db-ja.com

Angular.jsコントローラーを再初期化する

angular.jsの$ scope変数を操作するコントローラーがある場合、次の慣用的な方法があります。

  • コントローラの$ scopeをリセットし、
  • コントローラの初期化を再開しますか?

複雑なコントローラーの場合、特にコントローラーとスコープの単純な再初期化が本当に必要な場合は、すべての変数を初期値にリセットする必要がないことは非常に便利です。ただし、$location.path()を使用して同じURLに再度移動しても、効果はありません。

編集:$window.locationハックを使用できないとします。これは、Chrome Packaged AppsのCSPに違反するためです。

19
bfncs

質問した直後、私はようやく $route.reload() を使用してこれを解決する1つの方法を見つけました。

myapp.Controller('SampleController', function($location, $route) {

  $scope.navTo = function(url) {
    if ($location.path() === url) {
      $route.reload();
    } else {
      $location.path(url);
    }
  }

});

私はまだもっとエレガントな解決策があるに違いないと考えていますが、これは間違いなく私にとってはうまくいきます。

22
bfncs

Angular-ui-routerを使用している場合は、次の方法で行う必要があります。

myapp.Controller('SampleController', function($state) {

    $scope.navigate = function (stateName) {
        if ($state.is(stateName)) {
            $state.reload();
        } else {
            $state.go(stateName);
        }
    }
});
2
Ali Gonabadi