У меня есть панель поиска, использующая ui.bootstrap typeahead. Я ищу в таблице пользователей электронную почту, имя и фамилию.
У меня есть все, что связано, но он работает только с первым ИЛИ фамилией, вводимой в поле ввода, а не оба вместе.
Имя и фамилия не объединяются вместе.
При вводе электронного письма будет показан только результат имени, к которому оно относится, а не заполнение электронного письма.
Я надеюсь, что последняя часть имеет смысл.
Я предполагаю, что мне нужно обрабатывать данные по-разному, прежде чем они будут возвращены обратно в HTML. Но я не уверен, как именно это сделать.
Вот что у меня так далеко:
navbar.HTML
<input placeholder="Search..."ng-model="navbar.selected"uib-typeahead="results as results.first_name + ' ' + results.last_name for results in navbar.getSearchResults($viewValue)"type="text"typeahead-loading="loadingSearch"typeahead-min-length="3"typeahead-no-results="noResults"class="form-control" />
search.Controller
var vm = this;
vm.getSearchResults = getSearchResults;
function getSearchResults(search) {
return searchService.getSearchResults(search);
}}
search.Service
function getSearchResults(search) {
return $http.get(API_URL + '/search/' + search)
.then(handleSuccess)
.catch(handleError);
}
// private functions
function handleSuccess(response) {
return response.data[0];
}
function handleError(error) {
$log.error('XHR error: ');
$log.error(error);
return $q.reject(error);
}}
PHP
public function searchUsers($search)
{
$this->db->where('email', "$search%", 'like', 'or')->
where('first_name', "$search%", 'like', 'or')->
where('last_name', "$search%", 'like', 'or');
return $this->db->get('users');}
public function getSearch($search)
{
$results = array();
$search = $this->repository->searchUsers($search);
foreach ($search as $value) {
$newResult = array();
$newResult['email'] = $value['email'];
$newResult['first_name'] = $value['first_name'];
$newResult['last_name'] = $value['last_name'];
$results[] = $newResult;
}
return $results;
}
Пожалуйста, дайте мне знать, если я что-то пропустил.
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
Одна вещь, которую я обнаружил, оглядываясь назад на документацию typeahead, — это использование пользовательских шаблонов.
Используя пользовательский шаблон, я могу добавить в список результатов поиска по электронной почте.
<script type="text/ng-template" id="customTemplate.html">
<a>
<span ng-bind-html="match.label | uibTypeaheadHighlight:query"></span><br/>
<span ng-bind-html="match.model.email | uibTypeaheadHighlight:query"></span><br/>
<br/>
</a>
</script>
«UibTypeaheadHighlight: query» может быть избыточным, но вот как я заставил его работать на меня.
Я все еще не могу получить имя и фамилию, чтобы соединить должным образом все же.
Задача ещё не решена.
Других решений пока нет …