Вот как это делается:
Внутри вашей директивы элемента все, что вам нужно, это атрибут, который дает доступ к имени контроллера:
<card-dealer ng-repeat="card in cards" card="card"></card-dealer>
в моем случае мой card Атрибут содержит объект карты, который имеет имя.
В директиве установить изолята простор:
scope: { card: '=' }
Это изолирует и интерполировать объект карты в рамках директивы. Затем установите шаблон директивы для:
template: '<div ng-include="getTemplateUrl()"></div>'
это выглядит на регулятор директивы для функции с именем getTemplateUrl и позволяет установить templateUrl динамически, а также.
В контроллере директивы функция getTemplateUrl выглядит следующим образом:
controller: ['$scope', '$attrs', function ($scope, $attrs) {
$scope.getTemplateUrl = function() {
return '/View/Card?cardName=' + $scope.card.name;
};
}]
У меня есть MVC контроллер, который связывает соответствующий файл .cshtml и ручки безопасности, когда этот маршрут попал, но это будет работать с регулярный угловой маршрут.
В .cshtml/html файл, который вы создали динамический контроллер просто положить
<div ng-controller="CardContactController"></div>
в качестве корневого элемента. Контроллер будет отличаться для каждого шаблона. Это создает иерархию контроллеров, которая позволяет применять дополнительную логику ко всем картам в целом, а затем конкретную логику для каждой отдельной карты. Мне все еще нужно выяснить, как я буду обрабатывать свои услуги, но этот подход позволяет вам создать динамический шаблонный и динамический контроллер для директивы, используя ng-repeat на основе имени контроллера. Это очень чистый способ выполнения этой функции, и все это самодостаточно.
Под динамическим вы имеете в виду тянуть вниз контроллер окружающей среды (через 'require') или разрешить настройку контроллера непосредственно в директиве? –
@DavinTryon Я думал об использовании 'require', но это не сработает для моей ситуации, о которой я думаю, это означало бы инкапсулирование X количества контроллеров в X количество директив для связи с директивой, которую я имею в виду. Мне нужно настроить контроллер напрямую. –