【问题标题】:Simple run of Angular2 throws an error with es6-promise .PromiseAngular2 的简单运行使用 es6-promise .Promise 引发错误
【发布时间】:2016-02-16 06:58:40
【问题描述】:

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

var es6Promise = require('es6-promise').Promise;

// es6-promise asap should schedule microtasks via zone.scheduleMicrotask so that any
// user defined hooks are triggered
es6Promise._setAsap(function(fn, arg) {
  global.zone.scheduleMicrotask(function() {
    fn(arg);
  });
});

当前页面是:

<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>

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

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

问题是: 为什么 require('es-promise') 返回一个空对象? 我正在使用 app.js 的简单 typescript 导出,除了 angular.io 所讨论的 systemjs 之外别无其他。

我想我遗漏了一些东西,可能是 ES6 shim 或其他版本的 angular2 浏览器?

【问题讨论】:

    标签: javascript node.js angular es6-promise


    【解决方案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”(兼容性模块格式)。
    • 如果您希望它在旧浏览器上运行,请不要忘记添加 system-pollyfill

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 2019-06-03
      • 2019-01-05
      • 2015-07-21
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多