Я хотел бы reset состояние моего приложения angular, не заставляя обновление страницы. Какой идиоматический способ сделать это?
Как перезагрузить приложение angular без перезагрузки страницы?
Ответ 1
Я не знаю, есть ли идиоматический способ, но если вы используете ручной бутстрап (т.е. избавитесь от ng-app), то до reset вы могли бы
- Удалите элемент, который вы загрузили angular в
- Замените его чистой копией элемента
- Запустите бутстрап снова
Пример HTML:
<div id="myid" ng-controller="MyCtrl">
<button ng-click="i = i+1">Add 1</button>
<span>i = {{i}}</span>
<button ng-click="reset()">RESET</button>
</div>
Пример контроллера /JS (с включенным jQuery), который будет запускаться при загрузке:
var $cleanCopy = $("#myid").clone();
function bootstrap() {
angular.bootstrap(document.getElementById('myid'), ['mymodule']);
}
angular.module('mymodule', []).controller('MyCtrl', function($scope) {
$scope.i = 1;
$scope.reset = function() {
// You need this second clone or angular bootstraps
// into the original clone!
$("#myid").replaceWith($cleanCopy.clone());
bootstrap();
};
});
bootstrap();
Вот рабочий JSFiddle: http://jsfiddle.net/zd377/2/