2014-01-18 2 views
1

현재 로그인이 가능하고 로그인 할 때 기본 대시 보드를 보여주는 기본적인 Angular Dart 프로그램이 있습니다. 로그인을 마치면 대시 보드 경로로 리디렉션됩니다. 로그인 컨트롤러 내에서 라우터 개체에 액세스하는 방법을 모르겠지만 DI를 사용하여 컨트롤러 작업에 Router을로드하려고 시도했지만 이전에 초기화 된 것 대신 (예상대로) 새 Router 개체를 제공합니다.Angular Dart 컨트롤러의 액세스 라우터

main.dart

import 'package:angular/angular.dart'; 
import 'dart:convert' show JSON; 
import 'dart:html'; 

class TTRouter implements RouteInitializer { 

    Cookies _cookies; 

    TTRouter(this._cookies); 

    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'login', 
      path: '/login', 
      enter: view('login.partial.html')) 
     ..addRoute(
      name: 'home', 
      path: '/dashboard', 
      enter: view('dashboard.partial.html')); 
    } 

} 

@NgController(
    selector: '[login-controller]', 
    publishAs: 'ctrl') 
class LoginController { 
    Http _http; 
    Scope _scope; 

    LoginController(this._scope, this._http); 

    login() { 
    // Login API request ommitted 
    // TODO: insert redirect to 'home' route here 
    } 
} 


class TTModule extends Module { 
    TTModule() { 
    type(RouteInitializer, implementedBy: TTRouter); 
    type(LoginController); 

    factory(NgRoutingUsePushState, 
     (_) => new NgRoutingUsePushState.value(false)); 
    } 
} 

main() => ngBootstrap(module: new TTModule()); 

login()는 로그인 부분 뷰에서 ng-submit="ctrl.login()를 이용하여 호출된다.

잘못된 방식으로 접근하는 경우 코드 구조에 대한 의견도 보내 주시면 감사하겠습니다. 나는 Dart와 Angular (읽기/감시 자습서)에 익숙하지 않지만 이것은 내가 독자적으로 개발 한 첫 번째 응용 프로그램입니다.

답변

3

type 대신 모듈에 value이라는 라우터를 추가하면 매번 동일한 인스턴스가 생성됩니다.

TTModule() { 
    value(RouteInitializer, new TTRouter()); 
} 
+0

감사합니다. 컨트롤러에서이 값에 액세스하는 방법을 확장 하시겠습니까? – Ollie

+1

차이점이 없습니다. 차이점은 DI에이 유형을 처리하는 방법을 알리는 것입니다. 새로운 인스턴스 대신에'value (...) '메소드에 항상 제공되는 것을 받게 될 것이다. –

+0

나는 실수를 저질렀다. 많은 감사합니다! – Ollie

1

try with NgRoutingHelper.

class LoginController { 
    Http _http; 
    Scope _scope; 

    NgRoutingHelper locationService; 
    LoginController(this._scope, this._http, NgRoutingHelper this.locationService); 

    login() { 
    // Login API request ommitted 
    // TODO: insert redirect to 'home' route here 
    locationService.router.go('home', {}); 
    } 
} 

모듈에

type(NgRoutingHelper); 
+1

'NgRoutingHelper'는 내부 도우미 클래스입니다. 그것을 사용하지 말고 특별히 모듈 바인딩을 수정하십시오. – pavelgj

1

당신은 항상 Router의 동일한 인스턴스지고해야 할 서비스를 추가하는 것을 잊지 마세요 - 하나있을 수 있습니다를, 그렇지 않으면 예측할 수없는 일을 일어나기 시작합니다.

class LoginController { 
    Http _http; 
    Scope _scope; 
    Router _router; 

    LoginController(this._scope, this._http, this._router); 

    login() { 
    _router.go('home', {}); 
    } 
} 
관련 문제