【问题标题】:How to migrate existing Angular 2 TypeScript app to ReactJS?如何将现有的 Angular 2 TypeScript 应用程序迁移到 ReactJS?
【发布时间】:2019-02-19 00:46:02
【问题描述】:

我们有一个现有的代码库,它是使用 TypeScript 用 Angular 2 编写的。但现在我们计划将代码库迁移到 ReactJS。我不太确定如何做到这一点,而不需要将整个代码库与现有代码分开重写。

我正在寻找一种解决方案,它可以让我们同时使用 Angular 和 React 组件及其相互关联的依赖项。

【问题讨论】:

    标签: javascript angular reactjs typescript migrate


    【解决方案1】:

    这是一个痛苦的过程,但实际上是可行的。生成的应用程序最终将无法维护,因此我建议您仅在过渡到重构的 React 应用程序时这样做。

    一些例子:

    示例:集成 angular-bootstrap-datetimepicker

    angular
      .module('ngApp', ['ui.bootstrap.datetimepicker'])
    
    class AngularWidget extends React.Component {
      componentDidMount () {
        angular.bootstrap(this.container, ['ngApp']);
      }
      
      html = `<datetimepicker data-ng-model="data.date"></datetimepicker>`;
    
      render = () => (
        <div
          ref={c => this.container = c}
          dangerouslySetInnerHTML={{__html: this.html}}
          />
      );
    }

    示例:入侵 UI 路由器

    componentDidMount() {
      angular.module('ngApp')
        .run(($state) => {
          $state.go = (state, params, options) => {
            console.log('hijacked ui router');
          }
        })
      angular.bootstrap(this.container, ['ngApp']);
    }

    示例:消除 Angular 的位置篡改

    angular.module('ngApp', [])
        .config( ['$provide', function ($provide){
            $provide.decorator('$browser', ['$delegate', function ($delegate) {
                $delegate.onUrlChange = function () {};
                $delegate.url = function () { return ""};
                return $delegate;
            }]);
        }]);

    示例:卸载组件时清理 Angular 应用

    class AngularWidget extends React.Component {
      componentDidMount() {
        this.$rootScope = angular.injector(['ng', 'ngApp']).get('$rootScope');
        angular.bootstrap(this.container, ['ngApp']);
      }
      componentWillUnmount() {
        this.$rootScope.$destroy();
      }
      render = () => (
        <div
          ref={c => { this.container = c; }}
          dangerouslySetInnerHTML={{ __html: '<widget></widget>' }}
        />
      )
    }

    参考:https://medium.com/appifycanada/angular-components-in-react-2c929130f995

    【讨论】:

    • 这似乎适用于 AngularJS,我正在寻找适用于 Angular 2 TypeScript 组件的东西。
    • 这其实和port的方式差不多,你只需要为typescript配置webpack,但基本上方法是一样的
    • 好,我试试。
    • 问题是关于 Angular 2 而不是 AngularJS
    猜你喜欢
    • 2016-11-04
    • 2019-11-26
    • 2020-12-24
    • 2022-11-28
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2021-11-12
    • 2017-10-20
    相关资源
    最近更新 更多