Повторно инициализировать контроллер Angular.js
Если у вас есть контроллер для управления переменными $scope в Angular.js, существует ли идиоматический способ:
- reset область управления $scope и
- инициализация контроллера перезапуска?
Для сложных контроллеров было бы очень удобно не иметь в reset каждой переменной его начальное значение, особенно если то, что вы действительно хотите, это простая переинициализация контроллера и области. Однако переключение на тот же URL снова через $location.path()
не помогает.
Изменить: предположим, что я не могу использовать какой-либо трюк $window.location
, потому что это нарушит CSP в приложениях Chrome Packaged.
Ответы
Ответ 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);
}
}
});