@ng2react/support

Library of helper utils for AngularJS to React migration

Based on code found in react-in-angularjs

Installation

npm install --save @ng2react/support

Usage

Convert your AngularJS component or directive to React

You may do this manually or with the help of the ng2react vscode extension

// React Component
import React, { useState } from 'react'
import { useService, NgTranslate } from '@ng2react/support'

const MyReactComponent = ({ title, myController }) => {
  const myService = useService('myService')
  const [state, setState] = useState(myService.getState())
  return (
    <>
      <h1>{title}</h1>
      <p>{state}</p>
      <p>
        <NgTranslate id={'TRANLATED_TEXT_ID'} substitutions={myController.getValue()} />
      </p>
    </>
  )
}

Wrap your React component

// AngularJS Component
import * as angular from 'angular'
import { angularize } from '@ng2react/support'
import { MyReactComponent } from './MyReactComponent.jsx'

const myApp = angular.module('myApp', [])
angularize(MyReactElement, {
  module: myApp,
  name: 'myAngularComponent',
  bindings: {
    title: '@',
  },
  require: {
    myController: '^myController',
  },
})

2-Way Bindings

2-way bindings will not work automatically in react. To maintain this behaviour, you will have to manually call an update callback from within the React component and trigger the Angular digest cycle from the parent.

angularize can handle this for you:

const MyReactComponent = ({ myState, updateMyState }) => {
  return <input onChange={(e) => updateMyState(e.target.value)} value={myState} />
}

angularize(MyReactElement, {
  name: 'myAngularComponent',
  bindings: {
    myState: ['=', 'updateMyState'],
  },
})