Angular2:自定义选择组件和反应式表单 [英] Angular2: Custom Select Component and Reactive Forms

查看:21
本文介绍了Angular2:自定义选择组件和反应式表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 Reactive Forms 和创建自定义选择组件时遇到了麻烦.

我需要创建一些自定义选择组件.

我在 Stackoverflow 上查看了多个答案,其中涉及提供ControlValueAccessor"的实现.那些看起来可以工作,但对于我需要的东西来说非常重量级.

我也尝试过扩展SelectControlValueAccessor",但这似乎不是一件很常见的事情.如果它不常见,我会质疑这是否是解决我的问题的正确方法.

基本上,我需要一个自定义选择组件,它可以自动进行服务调用并使用响应式表单.

这与我想要做的类似:

@Component({选择器:'客户选择',styleUrls: ['./customer-select.component.css'],templateUrl: './customer-select.component.html'})导出类 CustomerSelectComponent 扩展 SelectControlValueAccess 实现 OnInit {客户:ICustomer[];构造函数(私人渲染:Renderer2,私有元素引用:元素引用,私人客户服务:客户服务,){超级(渲染,元素引用);}ngOnInit(): 无效 {this.customerService.getCustomers().subscribe((响应:IApiResponse) => {this.customers = response.Data;this.customers.sort(this.getFuncToSortMostUsedToDefaultOrdering());//额外的逻辑在这里},(错误:任何)=>控制台日志(错误),() =>console.log('getCustomers() 检索到的工作流'));}private getCompareToStrings(firstEl: string, secondEl: string) {如果 (firstEl < secondEl) {返回-1;}如果 (firstEl > secondEl) {返回 1;}返回0;}私人 getFuncToSortMostUsedToDefaultOrdering() {//假设我们有两个客户.return (firstElement: ICustomer, secondElement: ICustomer) =>{返回 SomeLogicHere.Compare(firstElement, secondElement)}}

这是 HTML 代码:

<select id="customer" class="form-control" formControlName="customer"><option *ngFor="让客户的客户" [ngValue]="客户">{{customer.CustomerNumber}}</选项></选择>

不要犹豫,提及我可能遗漏的任何细节.或者也许是我忽略的问题或设计讨论.

也许我可以使用组合而不是继承并组合SelectControlValueAccess",同时仍然实现ControlValueAccessor"?

任何不涉及太多手帕的琐碎解决方案?看起来其余的解决方案对于这样一件微不足道的事情来说是如此复杂.

我这样做的原因是因为这个客户选择"将在应用程序的很多地方使用.

此外,我将不得不为其他 5 个选择执行此操作,这就是为什么我不喜欢为如此琐碎的事情编写这么多代码的原因.

如果有人对此代码有任何输入,我认为此代码有效,也许是我忽略了一些内容,然后请分享:NEVERMIND BROKEN

@Component({选择器:'客户选择',templateUrl: './customer-select.component.html',供应商: [{提供:NG_VALUE_ACCESSOR,useExisting: forwardRef(() => CustomerSelectComponent),多:真}]})导出类 CustomerSelectComponent 扩展 SelectControlValueAccessor 实现 OnInit {客户:ICustomer[];构造函数(私人渲染:Renderer2,私有元素引用:元素引用,私有数据服务:数据服务,私人 fb:FormBuilder){超级(渲染,元素引用);}ngOnInit(): 无效 {this.dataService.getCustomers().subscribe((响应:IApiResponse) => {this.customers = response.Data;//附加逻辑},(错误:任何)=>控制台日志(错误),() =>console.log('getCustomers() 检索到的工作流'));}}

HTML:


                
            
发送“验证码”获取 | 15天全站免登陆