Есть ли способ динамически отображать различные шаблоны для компонента angular 1.5

у меня есть несколько угловых компонентов 1.5, которые все принимают одни и те же атрибуты и структуру данных. Я думаю, что они могут быть повторно учтены в одном компоненте, но мне нужен способ динамического выбора шаблона на основе интерполированного значения

3 ответов


это не то, что компоненты были специально изготовлен для. Задача сужается до использования директивы с динамическими шаблонами. Существующий ng-include.

чтобы использовать его в компоненте, он должен быть:

var myComponentDef = {
  bindings: {
    type: '<'
  },
  template: '<div ng-include="$ctrl.templateUrl">',
  controller: function () {
    this.$onChanges = (changes) => {
      if (changes.type && this.type) {
        this.templateUrl = this.type + '.html';
      }
    }
  }
}

вы можете ввести любую услугу и установить динамический url

angular.module('myApp').component("dynamicTempate", {
        controller: yourController,
        templateUrl: ['$routeParams', function (routeParams) {
           
            return 'app/' + routeParams["yourParam"] + ".html";
        
        }],
        bindings: {
        },
        require: {
        }
    });

вы должны иметь логику переключения где-то в любом случае, так почему бы просто не иметь его в шаблоне родительского компонента?

наличие чистого и понятного шаблона AngularJS в этом случае ИМО более ценно, чем немного повторения:

<ng-container ng-switch="$ctrl.myComponentDef.type">
  <component-type1 ng-switch-when="type1" param="$ctrl.myComponentDef"></component-type1>
  <component-type2 ng-switch-when="type2" param="$ctrl.myComponentDef"></component-type2>
</ng-container>

даже если вы измените myComponentDef.введите на лету, компоненты в коммутаторе будут правильно называть их соответствующими $onDestroy и $onInit методы и загрузить данные, как ожидалось - нет магии, нет вуду.