简单运行Angular2会引发es6-promise错误.Promise

时间:2015-11-14 22:13:09

标签: javascript node.js angular es6-promise

我正在尝试运行Angular 2 Alpha 45('https://code.angularjs.org/2.0.0-alpha.45/angular2.dev.js'),但它在“es6Promise._setAsap”处失败,说es6Promise未定义。

<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="javascripts/system.js"></script>
        <script>
          System.config({
            map: {
                'es6-shim':'javascripts/es6-shim.js',
                'angular2/angular2': 'javascripts/lib/angular2.alpha.45.dev.js'
            }
          });
            System.import('es6-shim').then(function(){
                System.import('javascripts/app.js');
            });

        </script>            
    </head>    
    <body>
        <my-app>Loading...</my-app>
    </body>
</html>

当前页面是:

import {Component, bootstrap} from 'angular2/angular2';
@Component({
    selector: 'my-app',
    template: '<h1>My First Angular 2 App b</h1>'
})
class AppComponent { }
bootstrap(AppComponent);

app.js包含示例文件的转换,其中包含:

compile "io.dropwizard.metrics:metrics-core:3.1.0"
compile "io.dropwizard.metrics:metrics-servlet:3.1.0"
compile "io.dropwizard.metrics:metrics-healthchecks:3.1.0"

问题是: 为什么require('es-promise')返回一个空对象? 我正在使用app.js的简单打字稿导出,而不是angular.io谈论的systemjs。

我想我错过了一些东西,可能是浏览器的ES6垫片或其他版本的angular2?

1 个答案:

答案 0 :(得分:1)

显然有另一个小时的搜索 - 我不知道为什么在Angular的当前文档中没有明确说明 - 有一个 SystemJs配置问题

缺少angular2在其脚本中使用特定格式的事实,您必须明确设置它。

HTML代码中的最终脚本如下所示:

<script src="javascripts/system-polyfills.js"></script>
<script src="javascripts/system.js"></script>
<script>
    System.config({
        paths:{"*":"../*.js"},
        map: {
            'angular2/angular2': 'javascripts/lib/angular2.dev',
            'crypto':'javascripts/crypto'
        },
        meta: {
            'angular2/angular2':{
                format: 'register'
            }
        }
    });
    System.import('javascripts/app');
</script>    

其他信息:

  • 我认为angular.io中的信息是针对较旧版本的SystemJs(可能是16,因为它真的与我在这里使用的19不同),我认为CommonJS在Angular中使用,但SystemJs警告我它在代码中找到了类似“System.register”的内容,所以我将格式更改为“register”(兼容模块格式)。
  • 如果您希望在旧浏览器上使用系统pollyfill,请不要忘记添加它