2016-07-14 319 views
9

Sto usando ASP.Net per rendere la mia app Angular 2 e l'unica pagina RAZOR che ho è _Layout.cshtml e mi piacerebbe poter passare alcuni dati di init da RAZOR al mio componente bootstrap, ma non funziona sembra funzionare.È possibile passare un valore @Input a app.component in Angular 2?

Nel mio _Layout.cshtml, ho le seguenti:

<my-app test="abc"></my-app> 

e nei miei app.component.ts, ho:

import { Component, Input } from "@angular/core"; 

@Component({ 
    selector: 'my-app', 
    template: "<div id='mainBody'>Test:{{test}}</div>", 
    directives: [MenuBarComponent, ROUTER_DIRECTIVES] 
}) 
export class AppComponent { 
    @Input() test; 
} 

mio variabile di test è vuota. C'è un modo diverso per farlo, o semplicemente non è possibile?

+0

http://stackoverflow.com/questions/37337185/passing-asp-net-server-parameters-to-angular-2-app/37384405#37384405 – yurzui

risposta

9

Non è possibile utilizzare gli ingressi per i componenti principali (quelli con bootstrap). È necessario per ottenere l'attributo direttamente dal DOM:

@Component({ 
    selector: 'my-app', 
    template: "<div id='mainBody'>Test:{{test}}</div>", 
    directives: [MenuBarComponent, ROUTER_DIRECTIVES] 
}) 
export class AppComponent { 
    constructor(private elementRef:ElementRef) { 
    this.test = this.elementRef.nativeElement.getAttribute('test'); 
    } 
} 
+0

Se volessi creare un oggetto javascript globale nel _Layout, come potrei accedere a questo all'interno del mio costruttore di TypeScript? – Scottie

+0

Lo si aggiungerebbe come provider nel NgModule tramite [InjectionToken] (http://angular.io/guide/dependency-injection-in-action#injectiontok it) –