AngularLoader.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. getScope();
  8. }
  9. export class AngularLoader {
  10. /** @ngInject */
  11. constructor(private $compile, private $rootScope) {}
  12. load(elem, scopeProps, template): AngularComponent {
  13. const scope = this.$rootScope.$new();
  14. _.assign(scope, scopeProps);
  15. const compiledElem = this.$compile(template)(scope);
  16. const rootNode = angular.element(elem);
  17. rootNode.append(compiledElem);
  18. return {
  19. destroy: () => {
  20. scope.$destroy();
  21. compiledElem.remove();
  22. },
  23. digest: () => {
  24. scope.$digest();
  25. },
  26. getScope: () => {
  27. return scope;
  28. },
  29. };
  30. }
  31. }
  32. coreModule.service('angularLoader', AngularLoader);
  33. let angularLoaderInstance: AngularLoader;
  34. export function setAngularLoader(pl: AngularLoader) {
  35. angularLoaderInstance = pl;
  36. }
  37. // away to access it from react
  38. export function getAngularLoader(): AngularLoader {
  39. return angularLoaderInstance;
  40. }