Насколько я прочитал все вопросы в SO, я еще несколько вопросов здесь вокруг controllerAs, используя общую директиву виджета ниже в качестве примераНесколько вопросов относительно controllerAs
var app = angular.module('test')
app.directive('genericDirective', function(){
return {
restrict:'E',
templateUrl: someUrlHere,
scope: { someScopeHere },
controllerAs: 'vm',
bindToController: true,
controller: function(){
someControllerHere
}
}
})
и шаблона для вышеуказанной директивы является
<div>{{info1}} {{info2}} {{info3}}</div>
и говорят, что есть, как несколько директив выше (genericDirective2, genericDirective3 и так далее), который использует такую же установку, как описано выше. Моя идея здесь, чтобы иметь общую директиву, которая может быть плагин в любом виде и работает с любыми контроллерами, которые обрабатывают мнение, которое выше директива находится.
Так сказать, если у меня есть макет ниже
<div id="someId" ng-controller="thisController">
<!-- Widget one -->
<generic-directive1></generic-directive1>
<!-- Widget two -->
<generic-directive2></generic-directive2>
<!-- Widget three -->
<generic-directive3></generic-directive3>
</div>
Предположим, что thisController получает JSON, который содержит все данные, необходимые для визуализации каждого директивы соответственно
{
"generic-directive-1": {
"id": "someId1",
"class": "someClass1",
"data": {
"info1":"someInfo1-1",
"info2":"someInfo1-2",
"info3":"someInfo1-3"
}
},
"generic-directive-2": {
"id": "someId2",
"class": "someClass2",
"data": {
"info1":"someInfo2-1",
"info2":"someInfo2-2",
"info3":"someInfo2-3"
}
},
"generic-directive-3": {
"id": "someId3",
"class": "someClass3",
"data": {
"info1":"someInfo3-1",
"info2":"someInfo3-2",
"info3":"someInfo3-3"
}
}
}
Как я могу сделать так, чтобы
- thisController может получить доступ к определенному genericDirective с помощью controllerAs (в данном случае с использованием controllerAs: 'vm'), скажем, если я хочу передать определенные параметры из этого контроллера в generic-директиву-3, как я могу это сделать?
- Правильная директива получит правильные данные от thisController? Поскольку я устанавливаю все директивы с контроллеромAs: 'vm'.
- Нужно ли мне использовать другое имя контроллера для каждой директивы? Как 2-3 директивы с одним и тем же контроллером могут использоваться на странице, а контроллер страницы может ссылаться на неправильную директиву?
на основе ваших вопросов, ваш шаблон, и ваш JSON, это ясно, ваш понимание того, как директивы и объем работы ошибочны. лучше всего думать о каждой директиве, поскольку это собственное мини-угловое приложение, предназначенное для работы независимо от вашего основного приложения. Если в директиве есть 'controllerAs: 'vm'', то шаблон директивы (и ** только ** этот шаблон) будет использовать' vm.info1'. Родительские или другие директивы sibling не будут иметь доступ к этому *** конкретному экземпляру *** 'vm'. Поэтому родитель должен указывать значения в директиве через атрибуты HTML. – Claies