2014-01-29 4 views
3

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

Я хочу сделать приложение директивы независимым (с единственными зависимостями, являющимися внешними css и jquery).

Here is a plunkr Директивы, как и сейчас.

И сама директива:

directive('suggest', function() { 
    return { 
     restrict: 'E', 
     template: "<input type='text'>", 
     replace:true, 
     link: function(scope, element, attrs) { 
     var language = 'en'; //set english as default language 
     if (attrs.lang){ 
      language = attrs.lang; 
      attrs.$observe('lang', function(value) { 
      console.log("lang val " + value); 
      language = value; 
      }); 
     } 
     $(element).suggest({ 
      "lang": language 
     }) 
     .bind("fb-select", function(e, data) { 
      console.log(data); 
     }); 
     } 
    }; 
}); 

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

.bind("fb-select", function(e, data) { 
      console.log(data); 
     }); 

Что является лучшей практикой для подачи данных из выбор приложения, использующего его?

ответ

4

Самым угловым способом было бы достичь связывания это с помощью данных (2 способа) в изолированном объеме:

restrict: 'E', 
     template: "<input type='text'>", 
     replace:true, 
     scope:{ 
     myModel:'=' 
     }, 
     link: function(scope, element, attrs) { 
     ............ 

и внутри этой функции выбора:

.bind("fb-select", function(e, data) { 
      console.log(data); 
      scope.myModel=data; 
}); 

использование:

<suggest my-model="someModel" .... />

и в вашем контроллере $ scope:

$scope.someModel="";

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

EDIT

Эти 2 статей отлично подходит для оказания помощи порта Jquery плагиных Угловой:

http://rogerz.github.io/blog/2013/09/27/jQuery-to-angularjs/

http://henriquat.re/directives/advanced-directives-combining-angular-with-existing-components-and-jquery/angularAndJquery.html

+0

Спасибо за ответ. Можете ли вы объяснить, что вы имеете в виду, когда говорите, что мне нужно обработать начальную привязку в директиве? Вы имеете в виду scope.myModel = data; линия? – bornytm

+0

Я не могу заставить это работать - я обновляю plunker – bornytm

+0

@bornytm, что должна делать эта директива? т.е. желаемое поведение? Есть несколько вещей, которые следует указать, вы передаете «lang» через область выделения в определении вашей директивы, но затем вы смотрите его с помощью «attrs. $ Наблюдать», если он передается через область, в которой вы используете область $ watch', 'attrs. $ наблюдать' за просмотр параметров атрибутов, а не параметров области. Я предлагаю вам взглянуть вокруг, чтобы посмотреть, как создаются угловые директивы, много хороших блогов. –

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

  • Нет связанных вопросов^_^