2016-09-23 1 views
22

Ich bin ein Anfänger in Winkel 2 und ich möchte meine erste App arbeiten lassen. Ich verwende TypeScript. Ich habe die app.component.ts, in dem ich eine Richtlinie auf einen anderen compoent todos.component genannt gemacht haben, aber ich bin den folgenden Fehler bei der Kompilierung bekommen:Angular 2-Komponenten-Richtlinie funktioniert nicht

[0] app/app.component.ts(7,3): error TS2345: Argument of type '{ moduleId: string; selector: string; directives: typeof TodosComponent[]; templateUrl: string; s ...' is not assignable to parameter of type 'Component'. 
[0] Object literal may only specify known properties, and 'directives' does not exist in type 'Component'. 

Mein Code wie folgt ist :

index.html

<html> 
    <head> 
    <title>Angular 2 QuickStart</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="styles.css"> 
    <!-- 1. Load libraries --> 
    <!-- Polyfill(s) for older browsers --> 
    <script src="node_modules/core-js/client/shim.min.js"></script> 
    <script src="node_modules/zone.js/dist/zone.js"></script> 
    <script src="node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 
    <!-- 2. Configure SystemJS --> 
    <script src="systemjs.config.js"></script> 
    <script> 
     System.import('app').catch(function(err){ console.error(err); }); 
    </script> 
    </head> 
    <!-- 3. Display the application --> 
    <body> 
    <app-root>Loading...</app-root> 
    </body> 
</html> 

app.componen t.ts

import { Component } from '@angular/core'; 
import {TodosComponent} from './todos/todos.component'; 

@Component({ 
    moduleId : module.id, 
    selector: 'app-root', 
    directives: [TodosComponent], 
    templateUrl : 'app.component.html', 
    styleUrls : ['app.component.css'] 
}) 

export class AppComponent { 
    title: string = "Does it work?"; 
} 

app.component.html:

<h1> Angular 2 application</h1> 
{{title}} 
<app-todos></app-todos> 

todos.component.ts

import { Component, OnInit } from '@angular/core'; 

@Component({ 
    moduleId : module.id, 
    selector: 'app-todos', 
    template: '<h2>Todo List</h2>' 
}) 

export class TodosComponent { 
    title: string = "You have to do the following today:";  
} 

Ohne die Richtlinie, die App funktioniert gut. Jede Hilfe wäre willkommen!

Vielen Dank im Voraus!

+0

Erstellen Sie nicht eine Richtlinie auf falsche Weise? aus der Angular2-Dokumentation 'import {Directive, ElementRef, Input, Renderer} aus '@ angular/core'; @Directive ({selector: '[myHighlight]'}) Exportklasse HighlightDirective { Konstruktor (el: ElementRef, Renderer: Renderer) { renderer.setElementStyle (el.nativeElement, 'backgroundColor', 'yellow'); } } ' – Pradeepb

+2

Wenn Sie das neueste Angular-Final verwenden, existiert' Direktiven' nicht mehr in '@ Component'-Metadaten (daher der Fehler). Wenn Sie ein Tutorial ablegen, sollten Sie versuchen, ein neueres zu finden. Innerhalb kurzer Zeit gab es viele Änderungen und viele Tutorials sind veraltet. Ich würde persönlich zu [Angular Dokumentation] (https://angular.io/docs/ts/latest/) gehen und von dort aus starten. –

+0

Stimmen Sie zu @peeskillet zu, werfen Sie einen Blick auf diese https://angular.io/docs/ts/latest/guide/attribute-directives.html. Verwenden Sie nicht 'directives:' von @Component, fügen Sie es nur in 'app.module.ts'' declarations: '. – haxpor

Antwort

50

In Ihrer app.component.ts definieren Sie directive: [TodosComponent]. Die directive-Eigenschaft wurde in RC6 vom @Component() Decorator entfernt.

Die Lösung hierzu ist zu:

  1. eine NgModule erstellen und
  2. erklären, die innerhalb des TodosComponent declarations: [] Array.

Sehen Sie hier ein Beispiel für AppModule:

https://angular.io/docs/ts/latest/tutorial/toh-pt3.html

+0

Danke! Das ist es! – candino

+2

@Alexander Was ist, wenn ich eine Anweisung für eine bestimmte Komponente im Gegensatz zu der gesamten Anwendung laden möchte? FYI - Ich habe versucht, den tinymce Texteditor zu laden. –

+1

Sie sollten ein Modul aus dieser einzelnen Komponente machen und dort sowohl die Komponente als auch die Direktive deklarieren. –

3

module.id wurde in intially hinzugefügt, wenn angular2 bei Beta version.Since war mit der neuen Version und Winkel cli unterstützen es nicht erforderlich ist, add moduleId: module.id, Sie können aus .ts Dateien entfernen