2016-04-13 4 views
1

J'ai une application Angular2 créée en utilisant l'interface de ligne de commande dont j'ai besoin pour exécuter dans différents modes. Ces modes doivent être transmis sur la chaîne de requête car la page sera hébergée dans un IFrame. D'après ce que j'ai lu, il y a un problème d'accès aux RouteParams dans l'application de premier niveau, car ils ne sont disponibles que dans un composant routé.Comment accéder RouteParams dans la classe App en Angular2

actuellement j'obtiens ce que je veux en allant à l'objet de location.search javascript mais si possible je préférerais le faire dans la dépendance correcte injectée de façon que je puisse tester les choses correctement. Est-ce que quelqu'un peut me conseiller la bonne façon d'accéder aux paramètres?

@Component({ 
    selector: 'eox-app', 
    providers: [ROUTER_PROVIDERS, RouteParams, 
     FilterService, 
     LoggingService, 
     SpinnerService, 
     StateService, 
    ], 
    templateUrl: 'app/eox.html', 
    styleUrls: ['app//eox.css'], 
    directives: [ROUTER_DIRECTIVES], 
    pipes: [] 
}) 
@RouteConfig([ 

].concat(CliRouteConfig)) 

export class EoxApp { 
    public menuItems = [ 
     { caption: 'Dashboard', link: ['DashboardRoot'] }, 
     { caption: 'Fonds', link: ['FundRoot'] }, 
     { caption: 'Logs', link: ['LogRoot'] }, 
     { caption: 'API', link: ['ApiRoot'] } 
    ]; 

    public isEmbeded = false; 
    constructor(
     private _router: Router, 
     private _log: LoggingService, 
     private _state: StateService, 
     private _routeParams: RouteParams) { 

     this.checkForEmbeded(); 
     let jwt = this.getCookie("eox-token"); 
     this._state.isAuthenticated = jwt === "123456"; 

     if(!this._state.isAuthenticated){ 
      this._log.log("Not authenticated", "Eox vNext"); 
      this._router.navigate(['DashboardRoot']); 
     } 
     else { 
      this._log.log("Authenticated user", "Eox vNext"); 
     } 
     if(this.isEmbeded && this._state.isAuthenticated) 
     { 
      this._log.log("Redirect to fundroot", "Eox vNext"); 
       this._router.navigate(['FundRoot']); 
     } 
    } 

    getCookie(c_name) { 
     var i, x, y, ARRcookies = document.cookie.split(';'); 
     for (i = 0; i < ARRcookies.length; i++) { 
      x = ARRcookies[i].substr(0, ARRcookies[i].indexOf('=')); 
      y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); 
      x = x.replace(/^\s+|\s+$/g, ""); 
      if (x == c_name) { 
       return unescape(y); 
      } 
     } 
    } 

    checkForEmbeded() { 
     this.isEmbeded = location.search.indexOf("embeded") > 0; 
     this._log.log("Embeded mode " + this.isEmbeded, "Eox vNext"); 
    } 
} 

Répondre

0

Vous pouvez injecter le Router (comme vous le faites déjà), abonnez-vous à, puis accéder aux params comme indiqué ci-dessous:

constructor(
     private _router: Router, 
     private _log: LoggingService, 
     private _state: StateService, 
     private _routeParams: RouteParams) { 
    this._router.subscribe(path => { 
     console.debug(this._router.currentInstruction.component.params); 
    }); 
} 
+0

semble prometteur mais je reçois une erreur de construction: rror: 'Tapuscrit trouvé les erreurs suivantes: D: /EOX2/depots/tmp/broccoli_type_script_compiler-input_base_path-3f2kXEiS.tmp/0/src/client/app/eox.ts (63,28): Argumen de type '{[clé: chaîne ]: chaîne; } 'n'est pas assignable au paramètre de type' chaîne '. à BroccoliTypeScriptCompiler._doIncrementalBuild (D: \ EOX2 \ dépôts \ node_modules \ angulaire-cli \ lib \ broccoli \ broccoli-type script.js: 111: 19) ' – Mark

+0

Dans la fermeture, cela fait référence à la fonction plutôt que le composant – Mark

+0

Pas si vous utilisez '=>' –