javascript - 将 ES6 与 Angular2 rc3 一起使用时需要未捕获的反射元数据垫片

标签 javascript angular ecmascript-6 systemjs

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

Uncaught reflect-metadata shim is required when using class decorators.

如果我从 '@angular/http' 中删除 import {Http, HTTP_PROVIDERS} ; 它有效。

此外,TypeScript 不会发生这种情况,但 JS ES5 和 ES6 会发生。 Webpack 也不会发生这种情况。

我查看了捆绑代码,似乎 SystemJS 在 Reflect 代码之前通过了 Angular 代码...仅使用 es6

索引.js

import 'reflect-metadata';
import 'es6-shim';
import 'zone.js';
import {bootstrap} from '@angular/platform-browser-dynamic';
import {App} from './app.js';
bootstrap(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]];  
  }
}

最佳答案

reflect-metadataes6-shimzone.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>

关于javascript - 将 ES6 与 Angular2 rc3 一起使用时需要未捕获的反射元数据垫片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054090/

相关文章:

javascript - Angular Strap Datepicker : Inconsistent timestamps returned, UTC +0 vs UTC +12 小时

javascript - 如何在具有不同高度的两个元素之间同步滚动

javascript - 修改日期时出现问题(修改错误)

javascript - 无法读取未定义的属性 'userNameInput'

javascript - Google Web Toolkit,附加错误

javascript - Backbone fetch、promises 和 if else。他们是如何工作的?

javascript - Angular 4 | Material 2 - 按钮切换组的突出显示未以编程方式正确更改

node.js - Angular/Electron服务输出传递给变量,但返回未定义

javascript - 模块导出中出现意外标记

javascript - Nodejs 中模块函数/类的实例