2014-10-05 5 views
0

코드는 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

답변

1

의 코드가 있습니다. 상위 범위, 서비스, localStorage 등과 같이 반복 데이터를 좀 더 지속적으로 유지해야합니다 (데이터가 필요한 부분에 따라 다름).

http://plnkr.co/edit/HETROBPwa6VyjX83Eev0?p=preview 내가 컨트롤러에서 간단한 console.log('scope', $scope);을 추가 할 수 있도록 : 여기

당신이 (당신은 아마 당신의 마지막 코드에서 $ rootScope 이외의 것을 사용한다) 볼 수 있습니다 만, 그래서 $rootScope를 사용하여 작업 예제 url을 변경할 때마다 새로운 범위가 만들어집니다.

+3

이것은 좋은 예입니다. 그러나 rootscope 대신 서비스를 살펴 보는 것이 좋습니다. 서비스는 싱글 톤이며 쉽게 테스트 할 수 있고 조롱받는 이점을 제공합니다. – pherris

+1

@pherris 그렇습니다. 그렇기 때문에 OP가 최종 코드에서 다른 것을 사용해야한다고 말한 것입니다. 코드에서 진행되는 작업을 가장 빨리 보여주기 때문에 루트 스코프로 작업을 수행했습니다. – Shomz

+1

@Shomz 감사합니다! –

관련 문제