코드는 plunker입니다. 컨트롤러가 두 개 있습니다. 첫 번째 컨트롤러에서 내보기에 단추에 대한 처리기가있다
$scope.click = function() {
$location.url("/some");
console.log("clicked");
}
처리기에서 나는 URL을 변경합니다. 또한 $ routeProvider를 구성했습니다. 내 URL이 /some
새로운 버튼으로 변경 후 그래서 내보기에 나타납니다 loading
컨트롤러 -
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
컨트롤러에이 단추에 대한 다른 처리기가 있습니다.
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
이 아닌 이유는 무엇입니까? 내 설명이 혼란 것을 알고,하지만 난 당신이 (따라서 새로운 변수 n
) 새로운 범위를 가진 새 컨트롤러를 인스턴스화하고 plunker
이것은 좋은 예입니다. 그러나 rootscope 대신 서비스를 살펴 보는 것이 좋습니다. 서비스는 싱글 톤이며 쉽게 테스트 할 수 있고 조롱받는 이점을 제공합니다. – pherris
@pherris 그렇습니다. 그렇기 때문에 OP가 최종 코드에서 다른 것을 사용해야한다고 말한 것입니다. 코드에서 진행되는 작업을 가장 빨리 보여주기 때문에 루트 스코프로 작업을 수행했습니다. – Shomz
@Shomz 감사합니다! –