6

Secondo this La risposta di Paweł Kozłowski, Typeahead di AngularUI-Bootstrap dovrebbe funzionare quando si ottengono in modo asincrono voci popup con risorse $ nelle versioni Angular più recenti (sto utilizzando 1.2.X).

Plunk - Paweł's version - Typeahead with $http

Credo che non so come usarlo correttamente (Come risultato si ottiene un errore in typeaheadHighlight di direttiva codice - typeahead tratta restituito subito Resource s come stringhe e pneumatici per evidenziarli).

Plunk - Typeahead with $resource

Credo che il codice critico è:

$scope.cities = function(prefix) { 
    var p = dataProviderService.lookup({q: prefix}).$promise; 
    return p.then(function(response){ 
     $log.info('Got it!'); 
     return response.data; 
    }); 
    return p; 
}; 

Ho provato sacco di roba - il ritorno $promise (versione da Plunker), query(), then().
Attualmente, sto usando $http per questa funzionalità nella mia app e sto bene con esso. Tuttavia, volevo solo sapere come ottenere lo stesso con $resource.

Si potrebbe voler dare un'occhiata a questo: https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d
è ui.bootstrap.typeahead compatibile con quei cambiamenti di API promessa $ di risorse?

risposta

7

dovrebbe essere:

$scope.cities = function(prefix) { 
    return dataProviderService.lookup({q: prefix}).$promise.then(
     function(response){ 
     // might want to store them somewhere to process after selection.. 
     // $scope.cities = response.data; 
     return response.data; 
    }); 
}; 

Questo si basa del angolare commit di cui sopra, e ha funzionato per me su angolari 1.2.13

+1

Come ho detto ho già provato che :) ci si va: http://plnkr.co/edit/lr7unp6b0XclWGTzgCyh. Librerie aggiornate, ancora non funzionanti. Se hai capito bene, fornisci la postazione di lavoro – vucalur

+1

Si sta dando l'errore 'Can not read property 'length' of undefined' – Shardul

4

Grazie alla risposta da @ andrew-lisci, ho fatto il mio con $ risorsa pure. Non ho avuto un attributo di dati nella mia risposta però. Ho usato il metodo di query su $ resource, che si aspetta un responsetype dell'array, quindi forse questo è il motivo per cui non esiste un attributo di dati. È una matrice di oggetti risorsa, ognuno dei quali contiene i dati. Quindi il mio codice è un po 'più semplice, sembra più simile a questo:

$scope.cities = function(prefix) { 
    return dataProviderService.query({q: prefix}).$promise.then(
     function(response){ 
     return response; 
    }); 
}; 
+3

Forse questo ha funzionato nel febbraio del 14, ma non funziona con le versioni correnti di angular – JustMaier

1

mi sono imbattuto in questo stesso problema e mi aveva sbattere la testa contro il muro. Il problema è con il servizio dati poiché restituisce una serie di stringhe invece di avvolgerle in un oggetto JSON. $ risorsa non funzionerà con una serie di stringhe.

Per ulteriori informazioni, consulta questa risposta: One dimensional array of strings being parsed to 2d by angular resource

1

typeahead = "i.t_UserName for i in EmployeeInfo | filtro: $ viewValue | limitTo: 4"
va come un attributo del vostro input html

e nel controllore (utilizzando risorse dipendente)

$ scope.employeeInfo = getEmployeeResourceSvc.getEmplInfo.query (function (response) {$ scope.employeeInfo = risposta; });

1

In ui-bootstrap 13.0 e angolare 1.3, è ora possibile effettuare le seguenti operazioni:

$scope.cities = function (q) { 
    return $scope.resource.query({ q: prefix }).$promise 
}