angular_loader.ts 945 B

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