AngularLoader.ts 1013 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import angular from 'angular';
  2. import coreModule from 'app/core/core_module';
  3. import _ from 'lodash';
  4. export interface AngularComponent {
  5. destroy();
  6. digest();
  7. }
  8. export class AngularLoader {
  9. /** @ngInject */
  10. constructor(private $compile, private $rootScope) {}
  11. load(elem, scopeProps, template): AngularComponent {
  12. const scope = this.$rootScope.$new();
  13. _.assign(scope, scopeProps);
  14. const compiledElem = this.$compile(template)(scope);
  15. const rootNode = angular.element(elem);
  16. rootNode.append(compiledElem);
  17. return {
  18. destroy: () => {
  19. scope.$destroy();
  20. compiledElem.remove();
  21. },
  22. digest: () => {
  23. scope.$digest();
  24. },
  25. };
  26. }
  27. }
  28. coreModule.service('angularLoader', AngularLoader);
  29. let angularLoaderInstance: AngularLoader;
  30. export function setAngularLoader(pl: AngularLoader) {
  31. angularLoaderInstance = pl;
  32. }
  33. // away to access it from react
  34. export function getAngularLoader(): AngularLoader {
  35. return angularLoaderInstance;
  36. }