2015-03-18 20 views
23

Ich habe mit der eckigen 2 Demo auf angular.io gespielt. Jetzt möchte ich eine neue Komponente erstellen und sie in meiner App verwenden.Angular 2, Komponente innerhalb der Hauptkomponente

Mein aktueller App:

import {Component, Template, bootstrap} from 'angular2/angular2'; 
import {UsersComponent} from './components/users/component.js'; 

// Annotation section 
@Component({ 
    selector: 'my-app' 
}) 
@Template({ 
    url:"app.html" 
}) 
// Component controller 
class MyAppComponent { 
    newName:string; 
    names:Array<string>; 
    constructor() { 
    this.name = 'Florian'; 
    } 

    showAlert(){ 
    alert("It works"); 
    } 

    addName(){ 
    names.push(newName); 
    newName = ""; 
    } 
} 

bootstrap(MyAppComponent); 

Meine Komponente:

import {Component, Template, bootstrap} from 'angular2/angular2'; 
// Annotation section 
@Component({ 
    selector: 'users' 
}) 
@Template({ 
    url:"./template.html" 
}) 
// Component controller 
class UsersComponent { 
    newName:string; 
    names:Array<string>; 
    constructor() { 

    } 

    addName(){ 
    names.push(newName); 
    newName = ""; 
    } 
} 

Ich bin mir nicht sicher, ob die Syntax meiner Benutzerkomponente überhaupt richtig ist.

Meine App-Vorlage:

<h1>Hello {{ name }}</h1> 
<h2>{{2+2}}</h2> 
<hr /> 
<button (click)="showAlert()">Click to alert</button> 
<users></users> 

So wie ich die Benutzerkomponente verkabeln tun?

Der Fehler, den ich in der Konsole:

"Error loading "components/users/component.js" at <unknown>↵Error loading "components/users/component.js" from "app" at http://localhost:8080/app.es6↵Cannot read property 'replace' of undefined" 

Antwort

22

Angular Kalender Demo hat zwei verschachtelte Komponenten (Kalender und Kalender-Zelle) https://github.com/djsmith42/angular2_calendar.git. Von dem, was ich Ihr MyAppComponent sehen können gibt es sollte Benutzer Komponente von @ Vorlage Direktiven Liste, wie diese Referenz:

@Template({ 
    url: System.baseURL+'app/components/calendar/calendar.html', 
    directives: [ 
    Foreach, 
    If, 
    CalendarCell 
    ] 
}) 
+0

Sie hatten Recht, danke für das Beispiel. Meine App hatte tatsächlich nicht das Direktiven-Array. Meine Vorlagen-URL meiner Benutzer-Komponente war falsch (sollte ein absoluter Pfad sein). Und ich habe meinen Komponentenordner nicht zu meinen Systempfaden in der HTML-Datei hinzugefügt. – user1613512

+0

Minor nit: Ich denke, du brauchst ein 'const' vor der Direktivenliste. Hier ist ein Mikro-Write-up mit einem modifizierten Quickstart-Tutorial: http://bq9.blogspot.ch/2015/03/angular2-dart-nested-components.html – buraq

+0

@buraq nein, das ist für Dart. Diese Person benutzt js. –

10

In diesem Link von Angular2 Web https://angular.io/docs/ts/latest/tutorial/toh-pt3.html# Sie können sehen, dass das Hinzufügen directives: [...] innerhalb von @Components zum Beispiel:

@Component({ 
    selector: 'my-app', 
    directives: [UsersComponent] 
}) 

aber sonst die Link-Vorlage in der Komponente, weiß nicht, ob dies funktioniert, wenn Sie @Template({ url:"app.html"}) außerhalb der Komponente verwenden.

können Sie den Dateinamen app.appcomponet.ts für weitere Details sehen, hoffentlich helfen.

+3

seit RC6 ist dies nicht mehr möglich. – rbtLong

Verwandte Themen