ngx-bootstrap 使用对象的 itemTemplate 提前输入
ngx-bootstrap typeahead with itemTemplate for object
我构建了一个 ngx-bootstrap/typeahead 组件,我在 ngx-formly 生成的表单中使用了它。
搜索结果来自 API,我将此组件重复用于不同的对象,因此密钥不是静态已知的。
我希望我的 typeahead 从我的 Observable 中获取结果并使用我的模板显示项目:
<div class="widget form-group">
<input id="typeahead-basic"
type="text" class="form-control" autocomplete="off"
[formControl]="formControl"
[formlyAttributes]="field"
[typeahead]="search$"
[typeaheadItemTemplate]="autocompleteItem"
[typeaheadAsync]="true"
/>
<!-- Works with typeaheadOptionField="value.nested" -->
</div>
<ng-template #autocompleteItem let-item="item">
<span>{{ item.value.nested }}</span>
</ng-template>
和可观察的:
search$ = new Observable((observer: Observer<string>) => {
observer.next(this.formControl.value);
}).pipe(
tap(v => console.log('Input: ' + v)),
switchMap(v =>
of([
{value: { nested: "foo"}},
{value: { nested: "bar"}},
{value: { nested: "foobar"}}
])
//of(['foo', 'bar', 'foobar'])
)
);
这曾经有效,但在升级了一些东西后就不再有效了。降级并没有解决问题...
这是一个 stackblitz:https://stackblitz.com/edit/angular-h3khea
如果您将 typeaheadOptionField="value.nested"
添加到 ,它会起作用。我以前从未使用过它,但在文档中找到了它。唯一的问题是,这似乎需要一个固定的字符串,我无法从我的 .ts 文件中加载它。
我还找到了一个示例,其中一切都像我的应用程序以前一样工作:https://stackblitz.com/edit/angular-8t8dcm-kzbw52
我不确定有什么区别,但它们似乎不使用反应式形式。而且我不会降级到 Angluar 7...
适用于 typeaheadOptionField
:
您可以将其用作 "string-setter" 并传递 属性 路径甚至方法名称(对于搜索结果对象上的方法):
typeaheadOptionField="my.property"
// or
typeaheadOptionField="myMethod()"
但您也可以使用正确的语法将它绑定到 属性:
[typeaheadOptionField]="propertyInComponent"
我构建了一个 ngx-bootstrap/typeahead 组件,我在 ngx-formly 生成的表单中使用了它。 搜索结果来自 API,我将此组件重复用于不同的对象,因此密钥不是静态已知的。
我希望我的 typeahead 从我的 Observable 中获取结果并使用我的模板显示项目:
<div class="widget form-group">
<input id="typeahead-basic"
type="text" class="form-control" autocomplete="off"
[formControl]="formControl"
[formlyAttributes]="field"
[typeahead]="search$"
[typeaheadItemTemplate]="autocompleteItem"
[typeaheadAsync]="true"
/>
<!-- Works with typeaheadOptionField="value.nested" -->
</div>
<ng-template #autocompleteItem let-item="item">
<span>{{ item.value.nested }}</span>
</ng-template>
和可观察的:
search$ = new Observable((observer: Observer<string>) => {
observer.next(this.formControl.value);
}).pipe(
tap(v => console.log('Input: ' + v)),
switchMap(v =>
of([
{value: { nested: "foo"}},
{value: { nested: "bar"}},
{value: { nested: "foobar"}}
])
//of(['foo', 'bar', 'foobar'])
)
);
这曾经有效,但在升级了一些东西后就不再有效了。降级并没有解决问题...
这是一个 stackblitz:https://stackblitz.com/edit/angular-h3khea
如果您将 typeaheadOptionField="value.nested"
添加到 ,它会起作用。我以前从未使用过它,但在文档中找到了它。唯一的问题是,这似乎需要一个固定的字符串,我无法从我的 .ts 文件中加载它。
我还找到了一个示例,其中一切都像我的应用程序以前一样工作:https://stackblitz.com/edit/angular-8t8dcm-kzbw52
我不确定有什么区别,但它们似乎不使用反应式形式。而且我不会降级到 Angluar 7...
适用于 typeaheadOptionField
:
您可以将其用作 "string-setter" 并传递 属性 路径甚至方法名称(对于搜索结果对象上的方法):
typeaheadOptionField="my.property"
// or
typeaheadOptionField="myMethod()"
但您也可以使用正确的语法将它绑定到 属性:
[typeaheadOptionField]="propertyInComponent"