Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2014, 00:18
Новичок на форуме
Отправить личное сообщение для Shurup312 Посмотреть профиль Найти все сообщения от Shurup312
 
Регистрация: 19.01.2014
Сообщений: 3

Как вставить DOM-элемент
Строю форму редактирования записи.
Мне с сервера приходит json в котором есть данные типа
[{"title":"...","value":"...","type":"..."},
{"title":"...","value":"...","type":"..."},
{"title":"...","value":"...","type":"..."}]

То есть я теперь для каждого параметра буду строить строку, в которой я слева укажу название, далее в зависимости от параметра type будут разные визуальные элементы, типа select, input и т.д.

Шаблон сделал таким
<tr ng-repeat="item in data">
<td>{{item.title}}</td>
<td>{{prepareElement(item)}}</td>
</tr>

Ну и думал просто сделаю в prepareElement то-то типа
return document.createElement(type);
А не тут то было, он мне в шаблон потом вставляет JSON какой-то.

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

Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2014, 10:58
Аватар для dolpheen
Интересующийся
Отправить личное сообщение для dolpheen Посмотреть профиль Найти все сообщения от dolpheen
 
Регистрация: 04.01.2014
Сообщений: 14

Разработчики ангуляра рекомендуют манипулировать DOMом из директив, прилагаю два варианта (второй предпочтительней, возможность использовать директивные templates, scope, compile и т.д.)

Вариант 1. Создание элемента в контроллере
<tr ng-controller="theController" ng-repeat="i in data">
			<td>{{i.title}}</td>
			<td></td>
		</tr>

controller('theController', ['$scope', '$element', function ($scope, $element) {
        console.dir($element);
        $scope.$watch('i.type', function(){
            $element.children().eq(1).html('<'+$scope.i.type+'></'+$scope.i.type+'>');
        });
    }])


Вариант 2. Создание элемента в директиве
<tr ng-repeat="i in data">
			<td>{{i.title}}</td>
			<td my-type></td>
		</tr>

directive('myType', function () {
        return {
            link: function (scope, elem, attr){
                elem.html('<'+scope.i.type+'></'+scope.i.type+'>')
            }
        }
    });


http://plnkr.co/edit/F56dqTONB4kgsImdIXhO?p=preview
Ответить с цитированием
  #3 (permalink)  
Старый 20.01.2014, 17:52
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от dolpheen
Вариант 1. Создание элемента в контроллере
является анти-паттерном
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обернуть элемент? helatmyelo jQuery 4 08.05.2012 19:56
Как вставить картинку на страницу поверх ее.. Вадим_СС Javascript под браузер 2 23.04.2012 08:45
как удалить элемент в DOM? czp Общие вопросы Javascript 11 17.12.2011 20:55
DOM элемент клонируется при хранении в хэше vls Events/DOM/Window 1 04.11.2011 14:57
Как отобрать каждый элемент тега <li> KamalovRadik jQuery 4 19.10.2011 14:49