将ES6与Angular2 rc3一起使用时,需要使用未捕获的反射元数据填充程序

roc*_*ter 16 javascript ecmascript-6 systemjs angular

我刚刚将Angular更新rc-1为最新版本rc-3.该应用程序使用的是JavaScript ES6和SystemJS.当我使用browsersync运行应用程序时,它可以工作.但是,如果我捆绑应用程序(使用systemjs-builder)然后运行它,我在浏览器控制台中出现此错误

使用类装饰器时,需要使用未捕获的反射元数据填充程序.

问题来自使用@angular/http基本http调用的组件,如果我删除import {Http, HTTP_PROVIDERS} from '@angular/http' ;它有效.

此外,它不会发生在TypeScript上,但它与JS ES5和ES6一起发生.Webpack也不会发生这种情况.

我查看了捆绑的代码,看起来SystemJS在Angular代码之前通过Reflect代码...仅使用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);
Run Code Online (Sandbox Code Playgroud)

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]];  
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ger 19

reflect-metadata,es6-shimzone.js应该是全球性的库.因此,您不应像在index.js中那样将它们导入到其中一个模块中.

尝试删除index.js中的import语句并在index.html中引用它们,就像Angular 2快速入门中所述:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我正在跑茉莉花.我没有index.html文件. (12认同)