2016-09-15 11 views
16

Я использую Angle 2 CLI, и я создал компонент «MyComponent» с помощью . Насколько я знаю, что я должен добавить компонент в директиве ключ-значение пары в @Component декоратора, но машинописный сборник не может в этот момент, сказав, что:Невозможно добавить новый компонент в мое угловое приложение 2 с машинописными текстами

ERROR in [default] /Users/Philip/Desktop/Angular2/src/app/app.component.ts:8:2 
Argument of type '{ selector: string; template: any; styles: any[]; directives: typeof MyComponentComponent[]; }' is not assignable to parameter of type 'Component'. 
    Object literal may only specify known properties, and 'directives' does not exist in type 'Component'. 

Это мой код для приложения :

import { Component } from '@angular/core'; 
import { MyComponentComponent } from './my-component/my-component.component' 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'], 
    directives: [MyComponentComponent], 
}) 
export class AppComponent { 
    title = 'app works!'; 
} 

Я не трогали код сгенерированного компонента, но только в том случае:

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

@Component({ 
    selector: 'app-my-component', 
    templateUrl: './my-component.component.html', 
    styleUrls: ['./my-component.component.css'] 
}) 

export class MyComponentComponent implements OnInit { 

    constructor() { 

    } 

    ngOnInit() { 
    } 

} 
+0

какой версия вы используете угловой2? – micronyks

+0

Вы используете версию CLI, которая соответствует угловой версии, которую вы используете? «директивы» на уровне компонента были устаревшими, а затем удалены (в RC6, IIRC). – jonrsharpe

+0

Я установил и сегодня, используя команду npm, как показано в документации. Оба должны быть в курсе событий, я не знаю, соответствуют ли они. –

ответ

18

сама ошибка говорит, что директивы сделать esn't нет вКомпонент, так как он устарел. попробуйте этот код, приведенный ниже,

import { MyComponentComponent } from './my-component/my-component.component' 
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; 

@NgModule({ 
    ... 
    ... 
    declarations:[AppComponent,MyComponentComponent], //<---need to declare 
    schemas:  [CUSTOM_ELEMENTS_SCHEMA]    //<---added this line 
}) 

И удалить директивы: [MyComponentComponent] из AppComponent.

+0

Спасибо. Я уже получил это объявленное в моем app.module.ts, как показано в вашем сообщении автоматически с помощью CLI. Компиляция машинописного текста, но не выполняется в браузере. Это огромная ошибка, я обновил ее до своего оригинального сообщения. –

+0

Затем вы удалили 'директивы: [...]' часть из '@ Component' ???? просто удалите его. Я надеюсь, что он начнет работать ... – micronyks

+0

Я не уверен, но я только что обновил свой ответ с помощью схем. Проверьте, работает ли он. – micronyks

34

Angular2 Декораторы компонентов больше не используют их для встраивания других компонентов. Вместо этого нам нужно будет использовать новые метаданные, называемые entryComponents. Ниже в качестве примера ...

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'], 
    entryComponents:[VehicleListComponent] 
}) 

Транспортное средство-список-компонент имеет следующие метаданные компонента ..

@Component({ 
    selector: 'app-vehicle-list', 
    templateUrl: './vehicle-list.component.html', 
    styleUrls: ['./vehicle-list.component.css'], 
    providers: [VehicleService] 
}) 
+2

Я только что заменил «директивы» на «entryComponents» и получил его на работу. Подробнее здесь: https://angular.io/docs/ts/latest/api/core/index/Component-decorator.html – wojjas

+1

Одинаковая проблема здесь, этот ответ полезен. Может кто-нибудь объяснить, почему имя изменилось? –

+0

Я также ссылаюсь на @@ NgModule, помещая компонент в ключ объявления и импортирую его в верхнюю часть файла (в моем случае @@ NgModule находится на app.module.ts). –

1

если использовать угловую CLI, то новый компонент будет автоматически импортированы и добавлены в раздел объявлений @ngmodule в app.module.ts. Для этого нам не нужно писать код.

0

У вас есть два варианта:

1: Используйте entryComponents тег внутри компонента

2: Использование угловой CLI, который автоматически импортирует его, поэтому мы не должны явно писать код для него.

1

НЕТ НУЖНО СДЕЛАТЬ С УГОЛОМ 4 или выше после запуска команды создания компонента. Вероятно, ошибка состоит в том, что вы не используете правильное селекторное имя из нового файла метаданных компонента (например, componentname.component.ts).