Создавая директиву angular -js, которая обновляет ng-model
Я пытаюсь создать директиву, которая обертывает плагин twart typeahead. Что я до сих пор:
HTML:
<input ng-twitter-typeahead type="text" ng-model="participant" data="exampleData" />
{{ participant }}
Я хочу, чтобы значение для "участника" обновлялось, когда я выбираю что-то на typeahead. Сам typeahead работает правильно, но я не могу зафиксировать выбранное значение. Ниже представлен javascript:
var app = angular.module('myApp', [])
app.directive('ngTwitterTypeahead', function () {
return {
restrict: 'EA',
scope: {
data: '='
},
link: function ($scope, $element, $attrs) {
$element.typeahead($scope.data);
$element.bind('typeahead:selected', function(obj, datum) {
// I really don't know how to do this part
// the variable 'datum' is what I want to be passed to ng-model
// I tried things like:
// Including the ngModelController and typing:
// ngModel.$setViewValue(datum)
// but that didn't work.
}
};
});
Мне явно не хватает чего-то фундаментального, когда дело касается AngularJS. Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ **
Я нашел решение. Иногда я не знаю:
angular.module('siyfion.ngTypeahead', [])
.directive('ngTypeahead', function () {
return {
restrict: 'C',
scope: {
datasets: '=',
ngModel: '='
},
link: function ($scope, $element, $attrs) {
$element.typeahead($scope.datasets);
$element.bind('typeahead:selected', function(obj, datum) {
$scope.$apply(function() {
$scope.ngModel = datum;
});
})
}
};
});
Ответы
Ответ 1
В директиве может потребоваться контроллер ngModel
. Он предоставит вам доступ к контроллеру модели внутри функции link
, см. http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController
Здесь вы можете найти пример, как использовать его в реальной жизни http://suhairhassan.com/2013/05/01/getting-started-with-angularjs-directive.html#.UhSdDOZdXUE
Ответ 2
Проект twitter Typeahead кажется заброшен.
Но вы можете использовать директиву Typeahead Angular из Angular UI Bootstrap library, которая активно поддерживается на данный момент.