Используя AngularJS, мне нужно добавить HTML к элементам ng-repeat, используя селектор: 'objectMapParent-' + post._id
<div ng-repeat="post in posts">
<div id="{{ 'objectMapParent-' + post._id }}">
<h5 style="color:blue; margin-top: 3px;">{{post.title}}</h5>
</div>
</div>
поэтому я создал цикл для перебора элементов массива сообщений, где для каждого элемента я вызываю функцию: createElement
$scope.posts = [{
_id: "1",
title: "map of london"
}, {
_id: "2",
title: "map of brazil"
}, {
_id: "3",
title: "map of usa"
}];
$scope.posts.forEach(function(post) {
// console.log(post);
createElement("#objectMapParent-" + post._id, function() {
//create map here after append
});
});
Эта функция обратного вызова получает селектор elementParent, который мы используем для поиска узла в DOM, а затем добавляем желаемый HTML
var createElement = function(elementParent, cb) {
var aux = elementParent;
var postId = aux.replace("#objectMapParent-", "");
var myElement = angular.element(document.querySelector(elementParent));
var html = "<div id='objectMap-" + postId + "'><div id='BasemapToggle-" + postId + "'></div></div>";
myElement.append(html);
cb();
};
Но что-то не работает, насколько я понимаю, функция document.querySelector не может найти селектор.
Мне кажется, что когда он пытается выбрать, узел еще не существует в DOM.
Я воспроизвел код в codepen, это может помочь.
Не уверен, что понимаю, почему вы не строите эту структуру непосредственно из представления, потому что вам нужно создать эту карту после добавления? Поскольку вы можете использовать директиву
ngInit
и вызывать эту функцию из представленияПочему вы пытаетесь сделать это вручную? В чем проблема с шаблоном angularjs?
@AlonEitan Я не могу использовать document.querySelector для элемента ng-repeat. Я не понимаю почему. Это очень важно для моего проекта.
Избегайте манипуляций с DOM в контроллерах. Вместо этого добавьте DOM с помощью пользовательских директив. Это особенно актуально при работе с директивой
ng-repeat
, которая добавляет и уничтожает DOM в процессе своей работы. Объект querySelector не может найти элемент, поскольку директиваng-repeat
еще не добавила его.