dynamic_directive_srv.ts 925 B

12345678910111213141516171819202122232425262728293031323334353637
  1. ///<reference path="../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. import angular from 'angular';
  4. import coreModule from '../core_module';
  5. class DynamicDirectiveSrv {
  6. /** @ngInject */
  7. constructor(private $compile, private $parse, private datasourceSrv) {
  8. }
  9. addDirective(element, name, scope) {
  10. element.empty();
  11. element.append(angular.element(document.createElement(name)));
  12. this.$compile(element)(scope);
  13. }
  14. define(options) {
  15. var editorScope;
  16. options.scope.$watch(options.datasourceProperty, newVal => {
  17. if (editorScope) {
  18. editorScope.$destroy();
  19. options.parentElem.empty();
  20. }
  21. editorScope = options.scope.$new();
  22. this.datasourceSrv.get(newVal).then(ds => {
  23. this.addDirective(options.parentElem, options.name + '-' + ds.meta.id, editorScope);
  24. });
  25. });
  26. }
  27. }
  28. coreModule.service('dynamicDirectiveSrv', DynamicDirectiveSrv);