- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 ngBootstrap for Angular 4 Typeahead 来自动完成。他们用于远程数据检索的示例是使用 Jsonp 而不是 http。在该示例中,我一直在尝试查找更多信息以将 Jsonp 替换为 http。我对 Observables 还不太熟悉,所以我正在尝试学习它们并更好地理解它们。
我看过这个 example,但它看起来真的很简单,也许(?)为了简单起见省略了很多……?
有人能指出正确的方向吗,我正在尝试使用带有 ngBootstrap Typeahead 的 http 找到一些很好的例子。
编辑
{
"took": 15,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 9,
"max_score": 4.2456956,
"hits": [
{
"_index": "query-index",
"_type": "autocomplete",
"_id": "AVxqBE-3t2o4jx2g0ntb",
"_score": 4.2456956,
"_source": {
"suggestions": "bruce"
}
},
{
"_index": "query-index",
"_type": "autocomplete",
"_id": "AVxqBE-3t2o4jx2g0ntc",
"_score": 3.064434,
"_source": {
"suggestions": "bruce wayne"
}
},
{
"_index": "query-index",
"_type": "autocomplete",
"_id": "AVxqBE-3t2o4jx2g0ntd",
"_score": 3.064434,
"_source": {
"suggestions": "bruce willis"
}
},
编辑 2
export class AutocompleteComponent {
model: any;
searching = false;
searchFailed = false;
constructor(private autocompleteService: Elasticsearch) {}
//formatMatches = (query: any) => query.hits.hits._source.suggestions || '';
//formatMatches = (query: any) => query.hits.hits || '';
formatMatches = (query: any) => <any>response.json().hits.hits || '';
search = (text$: Observable<string>) =>
//search = (text$: Observable<Suggestion[]>) =>
text$
.debounceTime(300)
.distinctUntilChanged()
//.switchMap(term =>
//Observable.fromPromise(this.autocompleteService.search(term)
.switchMap(term =>
this.autocompleteService.search(term)
.do( () => this.searchFailed = false)
.catch( () => {
this.searchFailed = true;
return Observable.of([]);
}))
.do( () => this.searching = false);
}
最佳答案
我想我知道一点如何解释它。但是,我正在构建一个处理过滤器的模式。下面是我的 httpService.getCarriers,它接受一个搜索字符串。
getCarriers(query: string): Observable<any> {
return this._http.get(this._ripcord + '/carriers?search_string=' + query, this.options)
.map((response: Response) => <any>response.json().data)
.do(data => console.log(data))
.catch(this.handleError);
}
在我的模式组件 (filters.component.ts) 文件中,知道我的服务返回一个对象数组,我必须创建一个 formatter 方法来处理输入和结果对象结构。
我想既然 ngbdTypeahead 接受一个 Observable,我会把这个词发送到我的 httpservice 并允许它返回一个 Observable 而不是尝试订阅它。
// filters.component.ts
import { Component, OnInit } from '@angular/core';
import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import { HttpService } from '../../../shared/http.service';
import { Carrier } from '../../../definitions/carrier';
@Component({
selector: 'afn-ngbd-modal-content',
templateUrl: './modal/filters.modal.html',
styleUrls: ['./modal/filters.modal.css']
})
export class NgbdModalContentComponent {
filtersForm: FormGroup;
carriers: Carrier[];
constructor(public activeModal: NgbActiveModal, public httpService: HttpService, private fb: FormBuilder) {
this.createForm();
}
carrier_search = (text$: Observable<string>) =>
text$
.debounceTime(200)
.distinctUntilChanged()
.do((text) => console.log(text))
.switchMap(term =>
this.httpService.getCarriers(term)
)
;
formatter = (x: {attributes: {name: string}}) => x.attributes.name;
createForm() {
this.filtersForm = this.fb.group({
name: ['', Validators.required],
});
}
}
@Component({
selector: 'afn-filters',
templateUrl: './filters.component.html',
styleUrls: ['./filters.component.css']
})
export class FiltersComponent implements OnInit {
constructor(private modalService: NgbModal) { }
open() {
const modalRef = this.modalService.open(NgbdModalContentComponent);
}
ngOnInit() {
}
}
这是我的模式的 HTML 模板:
// filters.modal.html
<div class="modal-header">
<h4 class="modal-title">Hi there!</h4>
<button type="button" class="close" aria-label="Close" (click)="activeModal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!--<p>Hello, {{name}}!</p>-->
<form [formGroup]="filtersForm" novalidate>
<div class="form-group">
<label class="center-block">Carrier:
<input type="text" class="form-control" formControlName="name" [ngbTypeahead]="carrier_search" [inputFormatter]="formatter" [resultFormatter]="formatter">
</label>
</div>
</form>
<p>Form value: {{ filtersForm.value | json }}</p>
<p>Form status: {{ filtersForm.status | json }}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" (click)="activeModal.close('Close click')">Close</button>
</div>
如果有任何具体问题,请告诉我。我有点四处乱逛,直到我开始工作。
不用说,即使 debounceTime 很棒,我仍然不想在用户输入至少 3 个字符之前执行请求。如果我尝试将该逻辑放在 switchMap 中,我会收到错误消息。
关于angular - 将 http 与 ngBootstrap Typeahead 一起用于 Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44007750/
在我的 html 页面中,我尝试添加 Typeahead 以进行自动完成,但我无法解决与 TypeError 和 ReferenceError 相关的问题。 我在 CodePen 上尝试了一个示例,工
我已经使用 npm 安装了 typeahead.js。根据我的阅读,这包括预输入和猎犬。 然后我在我的模块中需要 jquery 之后需要它。 但现在当我打电话 new Bloodhound() Blo
我正在尝试使用Twitter提前输入,但遇到了问题。我不知道如何提前将字符串传递给服务器。是通过GET参数吗?如果是这样,该参数的名称是什么? 最佳答案 通过GET参数最简单,您可以选择所需的任何参数
看起来 CSS 不适用于我的 Typeahead。 我正在尝试重现可滚动下拉菜单,例如 https://twitter.github.io/typeahead.js/examples 这是我的代码:
我正在这样设置 typeahead: $this.typeahead({ prefetch: $this.data('url-prefetch'),
我有一个 Typeahead 实例拉入一个列出机场的远程 JSON 对象,我需要按“位置组”将它们分组到建议中,如下图所示: ...这里是如何格式化 JSON 的示例: { "locations
作为标题,我想问:“是否可以限制预先输入显示的建议?” 例如,我有 3 个数据集,每个数据集有 10000 个结果(来自查询)。主题以字符 t 开头大约有 3000 个结果或可能更多。 如果我输入 t
我想实现的功能是,如果我点击一个 DOM 元素,它会自动填充其中包含指定值的预先输入,它应该为此触发 typeahead:selected。 我发现了很多与之相关的查询,答案是 jQuery#type
首先,请检查:http://ws.luyencong.net/data/search/query.php?do=advanced 您可以将该 JSON 的所有内容粘贴到此处:http://pro.js
我一直在尝试结合几个功能 in typeahead plugin特别是多数据集 + 空 + 默认建议。到目前为止没有运气,希望有人可以帮助 现在,为了使其工作,它是多个数据集之间的选择---或---空
我正在尝试将预输入结果放入页面上的特定 div 中。我获得了 JSON 回调数据,但我不知道如何使用它来填充特定的 div。 process 函数的唯一作用是在搜索字段下方列出结果,无论其长度如何。
正如在 screenshot - 使用 typeahead 时如何禁用自动填充? 谢谢。 附注: 使用的浏览器是 Chrome 版本 47.0.2526.106(64 位) 最佳答案 添加 autoc
正如在 screenshot - 使用 typeahead 时如何禁用自动填充? 谢谢。 附注: 使用的浏览器是 Chrome 版本 47.0.2526.106(64 位) 最佳答案 添加 autoc
我使用的是 0.11.1 版的 Twitter Typeahead。现在我正试图让远程工作正常,但不知何故我认为我的行为很奇怪。 这是使用本地数组的工作代码: var localArray = [{"
我试过在 web 应用程序中应用 twitters typeahead 插件。我使用 typeahead 插件初始化了许多 typeahead 输入字段,这似乎以某种方式起作用。该插件栩栩如生。然而,
所以我使用Materialziecss和第三方库进行标签输入 Materializecss:http://materializecss.com/ Materialize 标签库:http://henr
我想用 Typeahead JS 做一个简单的自动完成但我不能让它工作。我按照手册中的说明进行操作,但我不确定我在这里做错了什么。我无法从 json 文件中获取正确的值。它是一个带有对象的数组,我只想
我有一个 Angular uib-typeahead。这是我创建的 plunkr 的链接。 https://plnkr.co/edit/8XwhSXsZlyd0oKSljS9t?p=preview .
我实际上想发送我选择的主题(一个包含许多变量的 json 对象),而不是存储在 topicsPopulate 中的字符串(主题名称)。Topics 是一个主题数组,一个主题看起来像这样, {
我正在尝试使用带有 react-bootstrap-typeahead 的旧 jQuery typeahead 来复制搜索字段。它查询使用多个异步数据源,并显示按这些数据源的返回分组的结果。 例如,如
我是一名优秀的程序员,十分优秀!