如何在 Jsfiddle 中使用 Angular2 和 Typescript

How to use Angular2 and Typescript in Jsfiddle

虚拟问题...
我尝试在 jsfiddle 的 Typescript 中编写一个 angular2 (2.0.0-beta.6) 应用程序。
我知道网上还有其他解决方案,但是 ...
事实上,我的例子很小,问题出在导入模块上:

import {bootstrap} from 'angular2/platform/browser'
import {Component} from 'angular2/core';

我收到以下错误:

Uncaught ReferenceError: System is not defined
Uncaught ReferenceError: require is not defined

我尝试添加一些依赖项(require、system ...),但它不起作用。
Angular2 (angular2.sfx.dev.js) 的最新版本 (beta-6) 不再有自执行包。

一些测试:
https://jsfiddle.net/asicfr/q8bwosfn/1/
https://jsfiddle.net/asicfr/q8bwosfn/3/
https://jsfiddle.net/asicfr/q8bwosfn/4/
https://jsfiddle.net/asicfr/q8bwosfn/5/
https://jsfiddle.net/asicfr/q8bwosfn/6/

您还需要包含 SystemJS JS 文件。我看到你错过了。所有这些包括都是必要的:

<script src="https://code.angularjs.org/2.0.0-beta.3/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/tools/system.js"></script>
<script src="https://code.angularjs.org/tools/typescript.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.3/Rx.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.3/angular2.dev.js"></script>

然后您还需要使用以下代码配置 SystemJS,然后导入包含 bootstrap 函数的主模块:

System.config({
  transpiler: 'typescript', 
  typescriptOptions: { emitDecoratorMetadata: true }, 
  packages: {
    'app': {
      defaultExtension: 'ts'
    }
  } 
});
System.import('app/main')
.then(null, console.error.bind(console));

在 Plunker 中,您可以只使用菜单

New > Angularjs > 2.0.x (TS)

获得一个最小的 Angular2 应用程序

路由器

如果你想使用路由器添加config.js

'@angular/router': {
  main: 'router.umd.js',
  defaultExtension: 'js'
},

<base href="."> 因为 index.html<head> 中的第一个 child 可能也是必需的。

要切换到 HashLocationStrategy

更改 main.ts
import {bootstrap} from '@angular/platform-browser-dynamic';
import {App} from './app';

bootstrap(App, [])
  .catch(err => console.error(err));

import {bootstrap} from '@angular/platform-browser-dynamic';
import {App} from './app';
import {provide} from '@angular/core'
import {ROUTER_PROVIDERS} from '@angular/router';
import {LocationStrategy, HashLocationStrategy} from '@angular/common';

bootstrap(App, [ROUTER_PROVIDERS, provide(LocationStrategy, {useClass: HasLocationStrategy}])
  .catch(err => console.error(err));

如果您不依赖 JS Fiddle,请考虑 Plunker。 Angular 开发人员在 this link.

上使用新的 Angular 版本保持最新的裸工作区

它甚至比 Plunker 自己的 Angular 2 设置(您可以从 Plunker 菜单访问:New > AngularJS > 2.0.x (TS)

缺点:该设置是在 TypeScript 中进行的,因此如果您希望使用 vanilla Javascript(ES5 或 ES6)进行开发,最好的办法是改用 Plunker 菜单选项。