Я пытаюсь создать N число Выберите Элемент управления динамически управляется директивой на основе массива, который передается из атрибута (где N - длина массива).AngularJS не анализирует динамически загруженные данные из директивы
Структура объекта массива, как например:
selectDescription = {
array: arrayObject, //ng-options, a string as 'item as item.name for item in selectArray[0]'
change: methodName, //ng-change, actionname
level: levelNumber //level number
}
Таким образом, число отборного управления внутри диапазон тег зависит от количества selectDescription(s)
, что я получаю от этого атрибута.
Первый элемент управления успешно завершен. Последующие элементы управления выбора должны были отображаться при выборе опции от предыдущий отображаемый выбор элементов управления. Но этого не происходит в моем случае. Хотя я успешно добавляю угловые элементы в текущем inputEl (по выбору опции), он не отображается в пользовательском интерфейсе. Наверное, мне не хватает чего-то очень важного.
Об изменении selectDescriptions, Перевернутый атрибут установлен, с помощью которого я могу назвать scope.$editable.render()
от линии, которая, в свою очередь, запускает функцию визуализации повторно добавить в конец элементы после очистки предыдущего HTML внутри span
.
Мой код:
app.directive('editableLocation', function(editableDirectiveFactory) {
var createElement = function(el, index){
var newElement = angular.element("<select/>");
newElement.attr('ng-model','$data'+index);
newElement.attr('ng-options',el.array);
newElement.attr('ng-change',el.change.substring(0, el.change.length - 1)+", $data"+index+")");
return newElement;
}
var descriptions = [] ;
var dir = editableDirectiveFactory({
directiveName: 'editableLocation',
inputTpl: '<span></span>',
render: function() {
this.parent.render.call(this);
this.inputEl.html("");
for(var i = 0 ; i < descriptions.length ; i ++){
this.inputEl.append(createElement(descriptions[i], i));
}
}
});
var linkOrg = dir.link;
dir.link = function(scope, el, attrs, ctrl) {
console.log(el);
descriptions = scope.$eval(attrs.description);
scope.$watch('flipped',function(newValue,oldValue){
if(newValue != 0){
scope.$editable.render();
}
});
return linkOrg(scope, el, attrs, ctrl);
};
return dir;
});
Я сделал, как вы сказали. Хотя он показывает два элемента управления внутри this.inputEl.contents(), он по-прежнему не отображает одинаковое количество элементов управления в пользовательском интерфейсе. –
Возможно, это проблема с вашим кодом. Можете ли вы предоставить plunkr или скрипку? –
Здесь вы идете https://plnkr.co/edit/lX7aBnJz9b2D9p35Hke6?p=preview –