Обертывание angular typeAhead в отдельной директиве

Моя цель состояла в том, чтобы обернуть директиву angular-ui typeAhead в легко повторно используемый компонент, который можно было бы использовать следующим образом:

<input my-person-lookup="myModel.personId" ></input>

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

Теперь я хотел бы создать этот шаблон динамически, а затем скомпилировать его:

  var html = '<input type="text" ng-model="directiveModel.selectedPerson" typeahead=" p as p.name for p in people" typeahead-min-length="1" typeahead-wait-ms="200" typeahead-editable="false" placeholder="type p"></input>';
  element.replaceWith($compile(html)(scope));

К сожалению, этот подход не сработал Plunker.

Может ли кто-нибудь сказать мне, что я делаю неправильно?




Ответы (1)


Просто переместите свои данные в контроллер упаковки и удалите изолированную область.

Плункер

Plunker2

person Rob    schedule 04.12.2013
comment
Я был в ужасе от ряда ненужных JS-зависимостей (jQuery, Bootstrap CSS, angular-ui), поэтому почистил планк: plnkr.co/edit/YK7okuZlSoiglmGhtq5s?p=preview - person pkozlowski.opensource; 04.12.2013
comment
Подождите... поэтому, помещая данные (службу) в контроллер-оболочку, я создаю жесткую зависимость между контроллером и директивой, чего я не хочу. Я хочу, чтобы директива работала полностью независимо от параметров/служб, определенных в родительском контроллере. Изменить: Кроме того, поскольку эта директива будет повторно использоваться во многих разных приложениях, я считаю, что не рекомендуется удалять изолированную область. - person Valera; 04.12.2013
comment
Вы можете дать директиве собственный контроллер и область действия, а также передать контроллер-оболочку, если это необходимо. Я добавил второй плунжер в демо. - person Rob; 04.12.2013
comment
Ага! Указание явного контроллера для директивы — правильный путь. Я пытался использовать функцию объявления директивы в качестве ее контроллера, но это не сработало. Большое спасибо! - person Valera; 04.12.2013