У меня проблема, когда вложенность прилагаемых директив работает некорректно. запрос-строка представляет собой директиву (с шаблоном HTML), и я хочу иметь следующую структуру DOMКак добавить директиву в Angular
желаемого результата
<query-row></query-row>
<query-row></query-row>
<query-row></query-row>
etc...
Но что я получаю это. Также смотрите скриншот
<query-row>
<query-row></query-row>
<query-row></query-row>
etc...
</query-row>
код Javascript. Как вы можете видеть здесь, в контроллере я создаю элемент с именем query-row, а затем добавляю его к предыдущей строке запроса ... но здесь моя логика ошибочна, потому что она не добавляется, а скорее вложенные в первую строку запроса.
angular.module('app', ['ngAnimate', 'ui.bootstrap'])
.controller('queryBuilderCtrl', ['$scope', '$compile', function($scope, $compile) {
$scope.add = function() {
var queryRow = angular.element(document.createElement('query-row'))
$compile(queryRow)($scope)
angular.element('query-row').append(queryRow)
}
}])
.directive('queryBuilder', function() {
return {
restrict: 'E',
templateUrl: 'queryBuilderTemplate.html',
link: function(scope, elem, attrs) {
}
}
}).directive('queryRow', function() {
return {
restrict: 'EA',
templateUrl: 'queryRowTemplate.html',
link: function(scope, elem, attrs) {
}
}
});
Вот plnkr http://plnkr.co/edit/1WAgBCEbyk7Tz3fLKnnW
.append' что объявление ding внутри, вы должны использовать '.after()' /'.before() '.., но также делать манипуляции с DOM с контроллера будет считаться плохим шаблоном. –
Что касается лучших практик, вы не должны использовать. добавьте для добавления HTML на свою страницу. В идеале вы бы управляли представлениями вашего ребенка в повторителе, например ng-repeat или какой-либо другой директивой, тогда вы можете просто иметь переменную $ scope, которая содержит данные для правильного ввода в каждый элемент с петлями. Или в этом случае ваш queryBuilder должен содержать ретранслятор, который будет управлять строками запроса – SoluableNonagon
@SoluableNonagon вы можете объяснить это в примере? Мне не очень нравится решение .append либо – user1142130