Код в plunker. У меня два контроллера. В первом контроллере у меня есть обработчик для кнопки на мой взгляд
$scope.click = function() {
$location.url("/some");
console.log("clicked");
}
В обработчике я меняю URL. Я также настроил свой $ routeProvider.
var app = angular.module('plunker', []).config(function ($routeProvider) {
$routeProvider.when('/some', {template: " counter is {{n}}</br> <button ng-click='click()'>click to load new url but still with \"loading cntl\"</button>", controller: "loading"})
.when("/second",{controller: "loading"});
});
Здесь у меня есть два разных маршрута, которые имеют один и тот же контроллер - контроллер loading
Таким образом, после моего URL был изменен на /some
новой кнопки появляется на моем взгляде. У меня есть другой обработчик для этой кнопки в контроллере loading
.
app.controller("loading", function ($scope,$location) {
$scope.n= $scope.n || 0;
console.log("at the begining n is "+ $scope.n);
$scope.click = function click() {
$scope.n++;
console.log("n after++ is " + $scope.n);
$location.url("/second");
}
}); Здесь я увеличиваю число n
и изменяю URL-адрес на /second
. В моем $routeProvider
я указал, что маршрут с этим URL должен также содержать loading controller
. После запуска кнопки он исчезает, потому что /second
маршрутизатор не имеет шаблона. Я снова нажимаю кнопку на главном экране, мой loading controller
выполняется еще раз, но переменная n
остается 0. Почему значение n
не 1
? Я знаю, что мое объяснение сбивает с толку, но у меня есть код в plunker
Это хороший пример - однако я бы рекомендовал посмотреть сервис вместо rootScope. Услуги - это одиночные игры и предоставляют вам преимущества легко проверяемого и издевательства. – pherris
@pherris Да, да, именно поэтому я сказал, что OP должен использовать что-то еще в финальном коде - я сделал это с помощью корнеплодов, потому что это был самый быстрый способ показать ему, что происходит в коде. – Shomz
@Shomz Спасибо! –