В то время как angular.forEach возвращает только последнее значение из personList.
Как для каждого объекта в personList показать информацию с созданным directive?
I need exactly solution in forEach loop.
var app = angular.module('MyApp', [])
app.controller('MyController', function ($scope, $compile) {
var personList = [
{ name: "John", age: "20" },
{ name: "Peter", age: "25" }
];
angular.forEach(personList, function(p, i) {
$scope.person = { name: personList[i].name, age: personList[i].age };
var personInfo = ($compile)('<person-info></person-info>')($scope);
var body = document.querySelector("body")
var parentDiv = document.createElement("div");
body.append(parentDiv);
parentDiv.append(personInfo[0]);
});
});
app.directive("personInfo", function () {
return { template: '{{ person.name }} is {{person.age}} years old' }
});
В HTML:
Peter is 25 years old
Peter is 25 years old
Почему вы хотите сделать это в своем контроллере вместо использования ng-repeat с вашей директивой в разметке?
@Lex мне нужно делать это динамически
Вид будет динамически обновляться при изменении personList. Это довольно базовая часть фреймворка Angular, и, как уже указывалось, вы не должны выполнять манипуляции с DOM в контроллере.
любой элемент, который вы создаете вручную, никогда не будет обрабатываться самим Angular. так что да, это определенно не то, что вам нужно.


хорошо, это совершенно неправильно, вам следует избегать таких манипуляций, во-первых, вы не должны добавлять элемент директивы, способ - добавлять вещи в модель не напрямую в DOM, во-вторых, этого не должно происходить в контроллере (ссылка - это место, где вы компилируете вещи )