2015-07-16 28 views
14

Ho esperienza in AngularJS e sto iniziando a imparare Angular2. Sono all'inizio del mio percorso di apprendimento, ma sono già bloccato.Componente Angular2 non reso

Posso ottenere uno dei miei componenti per il rendering, ma non l'altro. Sto usando Visual Studio 2013 Ultimate e TypeScript 1.5 beta. Ecco la fonte:

index.html

<html> 
    <head> 
     <title>Angular 2 Quickstart</title> 
     <script src="https://github.jspm.io/jmcriffey/[email protected]/traceur-runtime.js"></script> 
     <script src="https://jspm.io/system.js"></script> 
     <script src="https://code.angularjs.org/2.0.0-alpha.28/angular2.dev.js"></script> 
    </head> 
    <body> 

     <!-- The app component created in app.ts --> 
     <my-app></my-app> 
     <display></display> 
     <script> 
      System.import('app'); 
      System.import('displ'); 
     </script> 
    </body> 
</html> 

app.ts

/// <reference path="d:/npm/typings/angular2/angular2.d.ts" /> 

import { Component, View, bootstrap} from 'angular2/angular2'; 

// Annotation section 
@Component({ 
    selector: 'my-app', 
}) 

@View({ 
    template: '<h1>Hello {{ name }}</h1>', 
}) 

// Component controller 
export class MyAppComponent { 
    name: string; 

    constructor() { 
     this.name = 'Alice'; 
    } 
} 

bootstrap(MyAppComponent); 

displ.ts

/// <reference path="d:/npm/typings/angular2/angular2.d.ts" /> 

import { Component, View, bootstrap} from 'angular2/angular2'; 

// Annotation section 
@Component({ 
    selector: 'display' 
}) 

@View({ 
    template: '<h1>xxxHello {{ name }}</h1>', 
}) 

// Component controller 
export class DisplayComponent { 
    name: string; 

    constructor() { 
     this.name = 'Bob'; 
    } 
} 

Th risultato e 'semplicemente:

Ciao Alice

Dov'è finito Bob andare?

Grazie!

UPDATE

mi rendo conto che stavo cercando di farlo nel modo sbagliato. La mia intenzione era quella di avere il componente display nidificato all'interno del componente my-app, ma il modello di my-app non includere gli ingredienti necessari:

  1. Essa non ha incluso un elemento <display></display>. Questo è stato invece incluso nel livello superiore index.html, che era il posto sbagliato.
  2. L'annotazione della vista non includeva il componente di visualizzazione come riferimento di direttiva.

Insomma, quello che avrei dovuto era:

app.ts (vista annotazione)

@View({ 
    template: '<h1>Hello {{ name }}</h1><display></display>', 
    directives: [DisplayComponent] 
}) 

E inoltre ho dovuto importare il mio componente di visualizzazione in app.ts:

import { DisplayComponent } from 'displ'; 
+2

'bootstrap (DisplayComponent);'? – nada

+0

@nada è necessario eseguire il bootstrap di ogni componente? –

+2

di solito abbiamo solo bisogno di eseguire il bootstrap del componente root e abbiamo inserito gli altri componenti al suo interno come direttive. Questo è stato solo il bootstrap della root. se si esegue il boot dei due componenti separatamente saranno due distinte applicazioni Angular 2 –

risposta

13

Si prega di aggiungere boostrap(DisplayComponent); come nada già sottolinea.

Dal quickstart:

Il bootstrap() funzione prende un componente come parametro, consentendo il componente (nonché eventuali componenti secondari in esso contenuti) per rendere.

Quindi sì, è necessario chiamare boostrap per tutti i componenti a meno che non siano figli di un altro componente.

+2

Ok visto che sono così nuovo con questo, ho appena realizzato che dovevo includere il mio secondo componente come direttiva nel primo ... –

+0

Ci sono dei modi che un componente potrebbe contenere altri componenti se non utilizzando le direttive? –

+2

@AviadP .: se si desidera rendere un componente figlio di un altro componente. Penso che il modo in cui lo usi usando una direttiva sia l'unico modo che conosco. –

Problemi correlati