0

Я адаптирую этот плагин автозаполнения jQuery в директиве - https://github.com/devbridge/jQuery-Autocomplete.Угловая директива сбрасывает двустороннюю привязку данных

У меня есть директива, которая работает:

App.directive('autocomplete', -> 
    return { 
    restrict: 'A', 
    link: ($scope, elem, attr) -> 
     console.log(attr.autocomplete) 
     elem.autocomplete({ 
     serviceUrl: '/videos/autocomplete/' + attr.autocomplete 
     }) 
    } 
) 

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

Любые идеи о том, как исправить это?

+0

это CoffeeScript? – dandavis

+1

Изменения есть, но плагин jquery не вызывает дайджест. Поэтому вы должны добавить обработчик события для вызова '$ scope. $ Digest', когда что-то изменится. – cgTag

+0

@ dandavis Конечно! – chintanparikh

ответ

0

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

Угловая есть способ наблюдать изменения в наших объектах, опирается на «пошаговая» природа JavaScript. Это объясняется очень четко в this awesome article by Jim Hoskins.

В основном, Угловая проверка изменений в циклах, но когда что-то меняется между этими циклами, у него нет никакого способа узнать, что ему нужно выполнить свои проверки снова! (ОЧЕНЬ simplicistic объяснений, снова обратитесь к the article)

Нижняя линия, мы должны сообщить ему, что мы что-то изменилось, так скажем, ваш выбор вызывает handler(), который выполняет action()

Вам просто нужно обернуть action в $scope.$apply

function handler(){ 
    $scope.$apply(function(){ 
     action(); 
    }); 
} 
Смежные вопросы