2014-11-18 3 views
0

내 주에 routeProvider가 있습니다.모든 상태에 대한 각도 하나 해결

$routeProvider. 
     when("/register",{ 
     templateUrl: "templates/register.html", 
     controller: "RegisterCtrl", 
     resolve: { 
      user: function(Auth) { 
      return Auth.resolveUser(); 
      } 
     } 
     }). 
     when("/home",{ 
     templateUrl: "templates/home.html", 
     controller: "HomeCtrl", 
     resolve: { 
      user: function(Auth) { 
      return Auth.resolveUser(); 
      } 
     } 
     }). .... [.....] 

모든 상태는 사용자 상태가 로깅 될 때 해결되는 약속을 갖습니다. 그런 다음 다른 컨트롤러의 코드가 실행됩니다. 이제는 모든 사이트에 있어야하는 탐색 바에 대한 mainController가 필요합니다. 컨트롤러는 새로운 메시지 등을 확인하기 위해 사용자 데이터를 필요로합니다.

Now : 루트 상태에서 전체적으로 해결 방법을 정의 할 수 있습니다 (그래서 모든 사이트의 루트 컨트롤러에서 userdata에 액세스 할 수 있습니다). 컨트롤러가이 코드 상태를 확인한 경우에만 코드를 실행합니다. 나는 내 질문에 이해할 수 공식화 희망

...

+1

모든 것을 이해할 수 있지만 모든 컨트롤러에서 액세스 할 수있는 것이 필요한 경우 https://docs.angularjs.org/guide/services 또는 $ rootScope에 넣지 않는 서비스를 만들어야합니다. –

+0

의견을 보내 주셔서 감사합니다. 네, 서비스에 대해 알고 있습니다. 주정부의 결의가 서비스에 접근하고 있습니다. 사용자의 로그인 상태를 처리하는 인증 서비스입니다. 그러나 부모의 상태로만이 약속을 해결하는 방법은 정확하지 않습니다. – m1crdy

답변

0

난 당신이 $routeChangeStart 같은 뭔가를 찾고 있다고 생각, 그것은 당신이 사용자가 웹 응용 프로그램 내에서 자신의 경로를 변경 때마다 원하는 뭔가를 실행하는 방법입니다. 좀 Routethis에서 다른 질문을 stackoverflow에서보십시오. 희망이 도움이됩니다.

+0

. 다른 주에있는 컨트롤러는 메인 페이지를 탐색하여 모든 페이지에서 기다릴 필요가 있습니다. 솔루션을 사용하면 사용자 객체가 데이터베이스에서 수신되기 전에 코드를 실행합니다. 따라서 코드를 실행하기 전에 모든 상태 (사용자가 로그인했는지 확인)에서 해결을 기다려야합니다. 이것은 분리 된 상태의 컨트롤러와 잘 동작합니다. 컨트롤러가 모든 페이지에 있어야하기 때문에 내 탐색 막대의 컨트롤러가 아닙니다. – m1crdy

+0

나는 이것 같이 문제가 있었다. 사용자가 실제로 로그인했는지 확인하기 전에 내 페이지가로드되었습니다. 이게 당신 문제 야? – augustoccesar

+0

Yeah ... exactly – m1crdy

0

당신은 $routeProvider.when 문 외부에서 경로를 정의하여이 작업을 수행 할 수 있습니다 : 당신의 경로를 통해

다음
var routes = [ 
    { 
    url: "/register", 
    config: { 
     templateUrl: "templates/register.html", 
     controller: "RegisterCtrl" 
    } 
    }, 
    { 
    url: "/home", 
    config: { 
     templateUrl: "templates/home.html", 
     controller: "HomeCtrl" 
    } 
    } 
]; 

반복이 resolve 속성을 확장 할 $routeProvider로 등록하기 전에 :

angular.forEach(routes, function (route) { 
    var url = route.url; 
    var routeConfig = route.config; 

    routeConfig.resolve = angular.extend(routeConfig.resolve || {}, { 
    // add your global resolves here 
    user: function(Auth) { 
     return Auth.resolveUser(); 
    } 
    }); 

    $routeProvider.when(url, routeConfig); 
}); 

귀하 Auth.resolveUser()은 이전에 이미 해결 된 경우 이행 약속을 반환해야합니다.

관련 문제