функции контроллера и ссылки в директиве не имеют одинаковой области действия

У меня проблема с моей директивой angular.js.

Это должно быть что-то вроде автозаполнения, в свойстве controller директивы я загружаю массив значений, а внутри шаблона компиляции функции link для отображения результатов.

Но когда я обновляю scope внутри ссылки, это не отражается на контроллере и шаблоне, взгляните на пример здесь - http://plnkr.co/edit/Lz3QGwklghPo3as2QTqU

Должен ли я apply изменить масштаб или что-то подобное?


person Kosmetika    schedule 06.02.2014    source источник
comment
почему вы вручную компилируете шаблон??   -  person Ajay Beniwal    schedule 06.02.2014
comment
потому что внутри компиляции это то же самое поведение.   -  person Kosmetika    schedule 06.02.2014


Ответы (2)


В вашем коде две проблемы

  • Прикрепить событие клика к документу вместо тела
  • Используйте $apply() внутри привязки

Ниже код решит вашу проблему

$document.bind('click', function (e) {
                    scope.results = [];
                    scope.$apply();
                });
person Ajay Beniwal    schedule 06.02.2014
comment
+1 большое спасибо, это решает эту проблему, всегда ли необходимо $apply при использовании компилятора angular? - person Kosmetika; 06.02.2014
comment
Вам нужно использовать $apply(), когда вы работаете вне углового контекста, функция привязки принадлежит Jqlite (или Jquery, если jquery включен на страницу), поэтому эта функция не принадлежит angular, поэтому вам нужно использовать $apply(). - person Ajay Beniwal; 06.02.2014

Я обновляю ваш метод $body.bind('click',...) до

$body.bind('change', function (e) {
    scope.results = [];
});

и вроде заработало (имею в виду, что через 0,5 сек набрал букву, список фамилий заново отображается).

person TeoMor    schedule 06.02.2014