any chance this has been u[dated? let me know! :D

On Tuesday, February 19, 2013 12:28:44 PM UTC-8, Mike Brennan wrote:
>
> I used a combination of things from this thread to work out a solution for 
> what I needed.  In my case, I wanted the typeahead field to have the ID 
> value of the item stored on the model as well.  IE, I had a table and 
> wanted people to perform application name lookups, but store the ID for 
> that application on a different model field.  I'm only posting to help 
> anyone else who might be looking into this type of behavior.  I didn't use 
> the angular-ui directive as I didn't want the field to behave like a 
> dropdown if you were tabbing across fields.
>
> This is the HTML:
>
> <tr ng-repeat="item in related_data.decrease" ng-class="{warning: 
> item._action}">
> <td>
> <input placeholder="account..." type="text" ng-model="item.account" 
> typeahead="accountTypeaheadFunction()"  parent="item" 
> key-field="application_id" key-field-target="accountID" 
> class="typeahead-query">
> </td>
> </tr>
>
> This is the JS code in your controller: [note that I have a custom entity 
> service, so you'd stick whatever you want in there to get the data...]
>
> $scope.accountTypeaheadFunction = function() { 
> return {
> source: function (query, process, event) {
> $q.all([
> Entity['applications'].query({application_name: '%' + query + '%'}).$q
> ]).then(function(results) {
>  objects = [];
> map = {};
>  if( results[0].data.rows ) {
> $.each(results[0].data.rows, function (i, accountData) {
> map[accountData.application_name] = accountData;
> objects.push(accountData.application_name);
> });
> } 
>  process(objects);
> });
> }
> }
> };
>
>
> Directive:
> configModule.directive('typeahead', function($q, Entity) {
>     return {
>         restrict: 'A',
>         require: 'ngModel',
>         link: function(scope, element, attrs, model) {
>
> // Defaults for all type aheads
> var defaults = {
> updater: function (item ) {
> return item;
> },
> matcher: function (item) {
> if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
> return true;
> }
> },
> sorter: function (items) {
>     return items.sort();
> },
> highlighter: function (item) {
> var regex = new RegExp( '(' + this.query + ')', 'gi' );
> return item.replace( regex, "<strong>$1</strong>" );
> }
> };
>  // merge the defaults with the passed in source data function
> var combinedData = $.extend({}, defaults, scope.$eval(attrs.typeahead));
>             element.typeahead( combinedData);
>             
> element.on('change', function() {
> if( attrs.hasOwnProperty('parent') ) {
> parent = scope.$eval(attrs.parent);
> if( map[element.val()] ) {
> parent[ attrs.keyFieldTarget ] = map[element.val()][ attrs.keyField ];
> } else {
> parent[ attrs.keyFieldTarget ] = "";
> }
> }
> // Update the model/view
> scope.$apply(function() {
>                     model.$setViewValue(element.val());
>                 });
>                 
>             });
>         }
>     };
> });
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to