2014-09-09 3 views
-1

Учитывая следующую директиву:AngularJS - Как получить доступ к моему шаблону в директиве?

myApp.directive("test", function() { 
    return { 
     restrict: 'E', 
     scope: { 
      model: "=" 
     }, 
     template: "<div id='dialog_{{model.dialogId}}'></div>", 
     replace: true, 
     link: function (scope, element, attrs) { 
      alert($("dialog_" + scope.model.dialogId).length); <-- This is 0 
     } 
    } 
}); 

мне нужно запустить метод JQuery UI на DIV в шаблоне, но я не могу показаться, чтобы получить ссылку на него из DOM в моей функции связи. Есть ли способ запустить функцию после добавления шаблона в DOM?

+0

http://plnkr.co/edit/jP5Opu8uBqLCEla9vRhB Посмотрите мои комментарии также – PSL

+0

Почему downvote ?? – Scottie

ответ

1

У вас есть свойство element. Вы можете сделать что-то вроде var div= element.find("div"); И если вы хотите подключить jquery-плагин, просто сделайте $(div).jqueryPlugin();, вы должны включить jQuery, но если вы не угловой, то предоставляете jQuery Lite.

+0

+1 У вас нет причин использовать '$ (# dialog_" + ...) 'если jquery включен до углового, элемент уже будет объектом jquery ... Но вы ничего не можете сделать, пока угловой не выполнит свой DOM манипуляции (здесь есть правильный идентификатор, анализирующий интерполяцию) .. '$ timeout' поможет этому. – PSL

0

То, что я в конечном итоге делает это было:

link: function (scope, element, attrs) { 
    $timeout(function() { 
     alert($("#dialog_" + scope.model.dialogId).length); 
    }, 0); 
} 

Я забыл поставить # перед селектором, но он все еще работает, только если я использую тайм-аут. Не знаю, почему.

+0

О, я думаю, наверное, я ошибся в плункере в своем комментарии ..: P – PSL

+0

Не похоже, что это хорошая идея использовать атрибут идентификатора в шаблоне. Что делать, если существует несколько директив? –

+0

Я генерирую GUID как dialogId, поэтому он всегда должен быть уникальным. – Scottie

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