При использовании ES6 с помощью Angular2 rc3 требуется нечистовое отражение метаданных.
Я только что обновил Angular от rc-1
до последнего rc-3
.
Приложение использует JavaScript ES6 и SystemJS. Когда я запускаю приложение с браузером, он работает. Но если я свяжу приложение (с помощью systemjs-builder), а затем запустим его, у меня есть эта ошибка в консоли браузера.
При использовании декораторов классов не требуется обрезка метаданных рефлекса.
Проблема возникает из компонента, использующего @angular/http
с базовым HTTP-вызовом, если я удаляю import {Http, HTTP_PROVIDERS} from '@angular/http' ;
, он работает.
Кроме того, это не происходит с TypeScript, но это происходит с JS ES5 и ES6. Также это не происходит с Webpack.
Я просмотрел связанный код и кажется, что SystemJS проходит через Angular
код до Reflect
code... только с es6
index.js
import 'reflect-metadata';
import 'es6-shim';
import 'zone.js';
import {bootstrap} from '@angular/platform-browser-dynamic';
import {App} from './app.js';
bootstrap(App);
app.js
import {Component} from '@angular/core';
import {Http, HTTP_PROVIDERS} from '@angular/http';
@Component({
selector: 'App',
template: '',
providers: [HTTP_PROVIDERS]
})
export class App {
constructor(http) {}
static get parameters() {
return [[Http]];
}
}
Ответы
Ответ 1
reflect-metadata
, es6-shim
и zone.js
должны быть глобальными библиотеками. Следовательно, вы не должны импортировать их в один из ваших модулей, как в index.js.
Попробуйте удалить операторы импорта в index.js и ссылаться на них в вашем index.html, как это описано в Angular 2 Quickstart:
<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>