Инъекции не работают в angular 2.0

Недавно я начал играть с Angular2. Я пытаюсь заставить инъекционные препараты работать уже полдня, но до сих пор не могу понять, что я делаю не так.

Чтобы сделать его максимально простым, я скопировал код из 5 Min Quickstart в официальная веб-страница. Сам демо работает нормально, но когда я пытаюсь использовать инъекции, я получаю сообщение об ошибке

ИСХОДНАЯ ОШИБКА: не удается разрешить все параметры для MyAppComponent. Убедитесь, что все они имеют допустимый тип или аннотации.

Мой машинописный файл

/// <reference path="typings/angular2/angular2.d.ts" />
import {Component, View, bootstrap,} from 'angular2/angular2';

class Names {}

// Annotation section
@Component({
    selector: 'my-app',
    injectables: [Names]
})
@View({
    template: '<h1>Hello {{ name }}</h1>'
})
// Component controller
class MyAppComponent {
    name: string;
    constructor(names: Names) {
        this.name = 'Alice';
    }
}

bootstrap(MyAppComponent);

P.S. Как и в Быстрый старт за 5 минут, я использую Traceur, SystemJS и Angular2 alpha (23).

Кто-нибудь знает, что мне не хватает?


person Alvydas    schedule 14.05.2015    source источник
comment
Кажется, я не получаю эту ошибку. Он отлично работает в 23. У вас есть реплика плунжера?   -  person PSL    schedule 15.05.2015
comment
@PSL вот ссылка на plunker (вместо добавления машинописного файла я добавил все, что у меня есть от компилятора 1.5). Если вы удалите параметр «names» из конструктора, он начнет работать, но не сделает инъекцию: plnkr.co/edit/OYITENWlIAd4L4GG9ZRc?p=preview   -  person Alvydas    schedule 15.05.2015


Ответы (2)


Ваш компилятор не добавляет свойства параметров в MyAppComponent (судя по вашему pluker). Я думаю, что это проблема. Если вы добавите

MyAppComponent.parameters = [[Names]]

тогда все будет хорошо работать.

  1. Вот ваш плункер с исправлением.
  2. Вот тот же пример в TS (с ES6)

UPD Спасибо @GrayFox за указание правильного пути (см. комментарий ниже):

Для будущих ссылок - используйте флаг --emitDecoratorMetadata при использовании tsc или добавьте emitDecoratorMetadata: true в конфигурацию, если вы используете gulp-typescript.

См. параметры компилятора TypeScript здесь (вы можете найти emitDecoratorMetada там).

person alexpods    schedule 15.05.2015
comment
Спасибо, что поймали это! Я попытаюсь выяснить, почему мой компилятор не добавляет параметры - person Alvydas; 15.05.2015
comment
@Alvydas, для меня это сработало, когда я изменил свой компилятор машинописного текста на цель 1.6. Я не вижу никакой разницы в выводе, разве я не должен видеть никакой разницы? - person abedurftig; 02.06.2015
comment
Для будущих ссылок - используйте флаг --emitDecoratorMetadata при использовании tsc или добавьте emitDecoratorMetadata: true в конфигурацию, если вы используете gulp-typescript. - person Gray Fox; 20.10.2015

Положи это:

 <PropertyGroup Condition=" '$(Configuration)' == 'Debug' " >
   <DebugSymbols>true < /DebugSymbols>
   < TypeScriptRemoveComments > false < /TypeScriptRemoveComments>
   < TypeScriptSourceMap > true < /TypeScriptSourceMap>
   < TypeScriptAdditionalFlags > $(TypeScriptAdditionalFlags)--emitDecoratorMetadata < /TypeScriptAdditionalFlags>
 < /PropertyGroup>
 < PropertyGroup Condition= " '$(Configuration)' == 'Release' " >
   <DebugSymbols>true < /DebugSymbols>
   < TypeScriptRemoveComments > true < /TypeScriptRemoveComments>
   < TypeScriptSourceMap > false < /TypeScriptSourceMap>
   < TypeScriptAdditionalFlags > $(TypeScriptAdditionalFlags)--emitDecoratorMetadata < /TypeScriptAdditionalFlags>
 < /PropertyGroup>

в ваш файл *.njsproj в конце.

person Josef Meier    schedule 21.05.2015