降级使用 Typescript 编写的 angular2 组件。如何将其导入用 es5 编写的 angular 1 项目?

Posted

技术标签:

【中文标题】降级使用 Typescript 编写的 angular2 组件。如何将其导入用 es5 编写的 angular 1 项目?【英文标题】:Downgrade angular2 component written with Typescript. How to import it into angular 1 project written with es5? 【发布时间】:2017-06-12 10:13:54 【问题描述】:

我已经降级了一个用 Angular2 + Typescript 编写的组件。现在我想在简单的 angular 1 应用程序中使用它,但是从 Typescript 编译的 js 文件正在使用“导入”,我从浏览器中得到它不受支持。我错过了什么?

这是一个简单的 angular 2 组件:

import  Component, OnInit  from '@angular/core';

@Component(
  selector: 'hello-world',
  template: `
    <p>
      hello from angular 2!
    </p>
  `,
  styles: []
)
export class HelloWorldComponent implements OnInit 

  constructor()  

  ngOnInit() 
  





import * as angular from 'angular';
import  downgradeComponent  from '@angular/upgrade/static';

angular.module('dannyApp', [])
  .directive(
    'helloWorld',
    downgradeComponent(component: HelloWorldComponent) as angular.IDirectiveFactory
  );

这是使用上述 angular 2 组件的简单 angular1 应用程序字符串:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
    <script src="dist\out-tsc\app\hello-world\hello-world.component.js"></script>

  <script>
      angular.module('app', [])

        .controller('FrameController', ['$injector', function($injector) 
          var vm = this;
          vm.message = 'Hello from angular 1';

        ]);

    </script>

    <title>Title</title>
</head>
<body ng-app="app">

<div id="body">
  <div ng-controller="FrameController as vm">
    vm.message
  </div>
  <!-- the angular 2 componenet -->
  <hello-world></hello-world>
</div>

</body>
</html>

浏览器错误: 未捕获的 SyntaxError:意外的令牌导入 上线:

import  Component  from '@angular/core';

【问题讨论】:

在将 require.js 添加到 html 后,现在我收到另一个错误:尚未为上下文加载模块名称“@angular/core”:_。使用 require([]) 不确定我还需要向我的 Angular 1 应用程序添加什么。 angualr2 组件的文件还需要更多吗?有人这样做并且对他有用吗? 【参考方案1】:

确保您已将 Typescript 组件编译为 ES5。 你的代码看起来像 ES6/Typescript。

检查您的 tsconfig.json 并确保目标:“es5”。

【讨论】:

在 es5 中找到该文件。但现在有关于“require”未定义的错误 添加了 'require.js' 并有所帮助。但它现在意味着什么:尚未为上下文加载模块名称“@angular/core”:_。使用 require([]) 他从哪里得到的?

以上是关于降级使用 Typescript 编写的 angular2 组件。如何将其导入用 es5 编写的 angular 1 项目?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript - 茉莉花 - Chutzpah - AngularJS

使用Angular与TypeScript构建Electron应用

将 Typescript 2.3 模块发布到 NPM 以供 Angular 4 使用

当我使用 webpack 和 ts-loader 构建项目时,Typescript 环境模块未解析

如何降级使用 angular2 编写的自定义管道以在 angular 1.5 中使用?

将 AngularJS 数组传递给降级的 Angular 7 组件