Como amarrar o typeahead do angular-ui com um servidor via $ http para otimização do lado do servidor?

O exemplo do typeahead ( http://angular-ui.github.io/bootstrap/#/typeahead ) menciona que é fácil implementar um back-end nesse preenchimento automático, mas não fornece exemplos. O que me interessa em particular é descobrir a string atualmente inserida para que eu possa enviar para o servidor e enviar de volta um resultado já filtrado – eu gostaria de fazer essa otimização no lado do servidor e minimizar minhas consultas, não acho que retornar todo o conjunto de resultados e apenas a exclusão de itens não correspondentes para exibição é viável para um aplicativo que tenha mais de 200.000 inputs no database.

Devo, neste caso, esquecer completamente o typeahead e implementar uma solução customizada com uma lista suspensa, ou existe uma maneira de fazer isso facilmente?

Existe uma maneira de implementar isso com muita facilidade, sem necessidade de implementar sua solução personalizada (pelo menos não neste caso!). Basicamente, você pode usar qualquer function como parte da expressão typeaheads, ex .:

 

Como você pode ver neste exemplo, o getStates($viewValue) (definido em um escopo) pode ser chamado e o $viewValue corresponde a um valor inserido por um usuário.

O que é melhor aqui é que a sua function pode retornar uma promise e essa promise será corretamente reconhecida pelo typeahead.

Algum tempo atrás eu escrevi uma amostra de plunk que mostra como usar chamadas do lado do servidor para fornecer auto-completar. Verifique este plunk que mostra autocomplete para todas as cidades nos EUA (com base em geobytes.com), onde as cidades são consultadas ao vivo de um serviço JSONP:

http://plnkr.co/edit/t1neIS?p=preview

Check-out para um exemplo de trabalho sobre como fazer a filtragem no lado do servidor (você precisa digitar pelo menos 3 caracteres para ver os resultados). Claro que você não está limitado a chamadas jsonp, você pode usar qualquer método que retorne uma promise.

Não tem o representante para comentar, então postar como uma resposta (desculpe!)

Se você estiver usando uma versão mais nova do bootstrap, você precisará adicionar o uib- na frente do typeahead (assim)