Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Использование динамичных данных в директиве (https://javascript.ru/forum/angular/41896-ispolzovanie-dinamichnykh-dannykh-v-direktive.html)

virus-07 03.10.2013 13:51

Использование динамичных данных в директиве
 
Добрый день. У меня есть блок, куда встаёт текст:
<div tag-style>{{tags}}</div>


Я хочу написать директиву, которая обработает текст и вернёт мне тэги.

myApp.directive('tagStyle',function(){
    return{
        link: function(scope, element, attrs, controller){
            element.html(devide(element.text().trim());
        }
    };

    function devide(text){
        ...
        return smth;
    }

    function trim(){
        return this.replace(/^\s+|\s+$/g, '');
    }
});


Директива отрабатывает, если данные подставлены статично. А так выводит результат обработки для текста {{tags}}
Я так понимаю, мне нужно использовать $compile? Как его использовать после передачи в директиву?

DjDiablo 03.10.2013 16:24

после вставки HTML выполни
$compile(element.contents())(scope);

Незабудь $compile подключить.

virus-07 03.10.2013 16:37

Добавлял эту конструкцию до :( Спасибо.
upd: не работает нормально, в функцию devide() падает ерунда.

DjDiablo 03.10.2013 17:16

Код покажи и что попадает ?

DjDiablo 03.10.2013 17:20

И еще замечу что вот эта функция
function trim(){
        return this.replace(/^\s+|\s+$/g, '');
}

здесь ( element.text().trim() ) не работает
Так как срабатывает trim для строки а твоя функция не при делах

virus-07 03.10.2013 17:43

Хорошо, ни при делах да и фиг с ней сейчас. Я силюсь понять логику compile и директив (смысл понимаю, реализацию не очень).
В функцию devide() падает {{tags}}, если его алертить.

nerv_ 03.10.2013 20:34

Цитата:

Сообщение от virus-07
Директива отрабатывает, если данные подставлены статично. А так выводит результат обработки для текста {{tags}}
Я так понимаю, мне нужно использовать $compile? Как его использовать после передачи в директиву?

на первый взгляд понимаете не верно. Передавайте параметры в директиву

virus-07 03.10.2013 21:47

Подскажите, пожалуйста, как их передать?
Я брал из element.text() и думал это верный способ — всё же в верстке остаётся только имя директивы..

nerv_ 03.10.2013 23:34

песочницу мне тоже за вас рисовать? :)

virus-07 04.10.2013 11:59

Цитата:

Сообщение от nerv_ (Сообщение 275005)
песочницу мне тоже за вас рисовать? :)

http://jsfiddle.net/3HT2F/4/

Прошу, угощайтесь пожалуйста :)
Как здесь $compile использовать? Если подставлять текст на прямую прям в div — работает нормально


Часовой пояс GMT +3, время: 01:21.