2013-04-08 2 views
0

В основном в моем контроллере я делаю $http.get() для загрузки некоторого html для установки «текущего представления». Моя проблема в том, что я не могу понять, как восстановить событие jQuery с помощью этого нового динамического контента.Как связать событие jQuery с динамическим контентом с помощью AngularJS

Прямо сейчас, я прибегал к somethign так:

$http.get('/someurl', {}).success(function(data){ 
    $scope.detailedView = data; 
    // Now here comes the rebinding 
    setTimeout(function(){ 
    // Use jquery to bind the new content 
    }, 1500); 
}); 

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

Примечание без тайм-аута привязки выполняются до того, как динамический контент фактически находится в DOM. Я также попытался найти то, что было бы похоже на то, чтобы подключиться к чему-то после запуска $ apply, но не нашел ничего подобного.

+0

Какой jQuery вы пытаетесь использовать? Что тебе нужно сделать? –

+0

Я просто пытаюсь использовать draggable/droppable из jquery-ui, я хочу отправить запрос на отправку, когда кто-то будет перетаскивать и использовать ответ обратно в моем ng-приложении. – Uri

+0

Вам нужно будет отделить свою логику. Материал UI находится в директиве - не в контроллере - и ваша логика обратного вызова с '$ http' в контроллере или службе. Жизненный цикл директивы гарантирует, что ваш тайм-аут не понадобится. Если да, то ответ Чарли ниже будет работать. –

ответ

2

Прежде всего, следует проверить, нельзя ли сделать то, что вы делаете с jQuery, используя угловые.

Вот наиболее упрощенная версия директивы, которые могут быть использованы:

<div ng-repeat="item in items" my-directive>Item {{$index+1}}</div> 
app.directive('myDirective', function ($timeout) { 
    return function (scope, element, attrs) { 
     $timeout(function() { 
      /* element is a jQuery object when jQuery loaded in page before angular,*/ 
      /* otherwise is a jQlite object that has many of same methods as jQuery*/ 
      element.css({ 'border': '1px solid green', 'margin': '10px 30px','padding':'5px'}); 
     }, 0); 
    } 
}); 

Вот дем, которая использует длинный тайм-аут, чтобы генерировать данные для повторных элементов, которые используют директиву:

http://jsfiddle.net/AXYGL/

+0

кажется немного .. inelegant, нужно полагаться на тайм-аут для запроса ajax, но он делает трюк. – Uri

+0

просто одна из проблем с угловым и дайджестским циклом. Директивы могут выполняться несколько раз в цикле, и элемент не существует каждый раз, если он динамически генерируется. Тайм-аут в директиве не имеет ничего общего с задержкой ajax. – charlietfl

+0

Я закончил настройку некоторых вещей, чтобы сделать ее более угловатой, а затем использовать что-то вроде этого, но без '$ timeout', и это сработало. Благодаря! – Uri

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