Подтвердить что ты не робот

Повторно инициализировать контроллер Angular.js

Если у вас есть контроллер для управления переменными $scope в Angular.js, существует ли идиоматический способ:

  • reset область управления $scope и
  • инициализация контроллера перезапуска?

Для сложных контроллеров было бы очень удобно не иметь в reset каждой переменной его начальное значение, особенно если то, что вы действительно хотите, это простая переинициализация контроллера и области. Однако переключение на тот же URL снова через $location.path() не помогает.

Изменить: предположим, что я не могу использовать какой-либо трюк $window.location, потому что это нарушит CSP в приложениях Chrome Packaged.

4b9b3361

Ответ 1

Сразу после запроса я наконец нашел один способ решить эту проблему, используя $route.reload().

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

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

});

Я все еще думаю, что должно быть более элегантное решение, но это определенно работает для меня.

Ответ 2

Если вы используете angular -ui-router, тогда вы должны сделать это следующим образом:

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

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