Вы могли бы сделать что-то вроде этого:
.directive("myDropdown", function() {
return {
restrict: "E",
require: ["myDropdown", "?^^myDropdown"],
template: "<select ng-options='opt as opt.label for opt in $ctrl.options' ng-model='$ctrl.selectedOption' ng-change='$ctrl.changed($ctrl.selectedOption)'></select><div ng-transclude></div>",
scope: true,
bindToController: {
url: "@",
label: "@"
},
controller: function($scope, $http) {
var _self = this;
_self.init = function() {
$http.get(_self.url).then(function(response) {
_self.options = response.data;
});
}
_self.parentChanged = function(item) {
var id = item.id;
$http.get(_self.url + "?id=" + id).then(function(response) {
_self.options = response.data;
});
}
},
link: function(scope, element, attrs, ctrls) {
var ctrl = ctrls[0];
var parentCtrl = ctrls[1];
if (parentCtrl) {
scope.$watch(function() {
return parentCtrl.selectedOption;
}, function(newval) {
if (newval) {
ctrl.parentChanged(newval);
}
});
} else {
ctrl.init();
}
},
controllerAs: "$ctrl",
transclude: true
}
});
EDIT: У меня есть рабочий пример here
У меня есть несколько вопросов, зачем использовать [ "? ^^ myDropdown" "myDropdown",] , – barteloma
Первый требует контроллера самой директивы, поэтому его можно использовать в функции 'link'. Второй используется для запроса родительской директивы my-dropdown. Если он не является нулевым, значит, есть родительский элемент, поэтому он может наблюдать за его выбранным элементом. – devqon
Я хочу генерировать динамически вложенные директивы. Это возможно? Данные будут объектом javascript вложенной директивы. и генерировать 'ng-repeatad' или другим способом? – barteloma