2013-05-02 4 views
0

Я новичок в Angular и пытаюсь понять, как динамически создавать новые элементы. У меня есть директива элемента, называемая «панель», которая заменяет тег панели шаблоном.Использование AngularJS, как добавить директиву к элементу?

<pane ng-controller="AreaCtrl"></pane> 

Шаблон для панели (сокращенном):

<div> 
    <section></section> 
    <div class="subs"></div> 
</div> 

Когда я нажимаю на элемент внутри раздела тега, я хочу добавить еще один «панель» внутри DIV с классом = «подлодки», если «панель» для выбранного элемента еще не существует. Я не могу получить добавленный тег панели, чтобы вызвать директиву и быть заменен шаблоном. Любая точка в правильном направлении была бы полезна для Углового новичка.

Вот простой jsfiddle: http://jsfiddle.net/n9vXz/1/

+0

шаблона в директиве фактически templateUrl в моем фактическом коде, если это делает разницу. –

ответ

0

Я не знаю, как вы, добавляя его к телу, но показывая вам, как это сделать, я буду считать, что это просто элемент у вас есть.

var newPaneElement = ..... 
someOtherElement.append(newPaneElement); 

Для того, чтобы ваша директива будет обрабатываться сейчас, вы должны сказать ему, чтобы $compile

Вы можете сделать это, выполнив следующие действия непосредственно после добавления его в someOtherElement:

$compile(newPaneElement)($scope OR scope); 

Я поместил $ scope или scope, потому что я не уверен, где вы добавляете его в контроллер или внутри директивы.

Если вы можете вставить jsFiddle, это было бы полезно.


Там нет необходимости делать компиляции, я думаю, вы должны смотреть некоторые обучающие видеоролики о том, как использовать угловой. Если вы посмотрите на jsfiddle, вам не нужен jquery. Кроме того, у вас есть директивная проводка над элементом панели, но затем внутри этой директивы у вас есть другой элемент панели, поэтому он выполняет рекурсивный цикл и сбой. Я исправил скрипку, чтобы сделать то, что вам нужно:

JsFiddlehttp://jsfiddle.net/BcvPz/1/


Используйте нг-повтора, а затем вы можете просто быть Элементы панели повторять везде, где

JsFiddlehttp://jsfiddle.net/BcvPz/2/

+0

Вот jsfiddle я бросил вместе: jsfiddle.net/n9vXz/1/ –

+0

Это не делает то, что я хочу, чтобы он делал. Я хочу добавить другой элемент панели, когда я добавляю что-то в массив items. Ваш jsFiddle просто добавляет элемент span. –

+0

Это сделает его рекурсивным. Вы можете использовать ng-repeat для массива элементов панели. –

2

Возможно, вам понадобится массив в вашей модели с директивой ng-repeat:

<div> 
    <a href="#" ng-click="addItem()">Add Item</a> 
    <section></section> 
    <div class="subs"> 
     <pane ng-repeat="item in list"></pane> 
    </div> 
    </div> 

JS:

app.controller("AreaCtrl", function($scope){ 
    $scope.items = [{ name: 'item1' }]; 
    $scope.addItem = function(){ 
    $scope.items.push({ name: 'newItem' }); 
    }; 
}); 
+0

Действительно! С AngularJS мы всегда должны думать в терминах нашей модели * first *. Лучшая архитектура, более простое тестирование. Не говоря уже о том, что код просто короче ... –

+0

Так я и попытался его загрузить, но когда я попытаюсь загрузить его, даже если мой массив элементов пуст, он замораживает браузер. Иногда я получаю «Максимальный размер стека вызовов». Вот jsFiddle я бросил вместе: jsfiddle.net/n9vXz/1/ –

+0

выглядит как проблема рекурсии, вам нужно реорганизовать директиву, чтобы явно указать модель (определяющую область изоляции), вы можете попробовать начать с http://jsfiddle.net/ganarajpr/vzvmS/3/ – Guillaume86

Смежные вопросы