Angular 为什么mat select不';当正常选择执行时,是否执行ngModel值?
我在应用程序中使用角度材质,因此我使用选择框的Angular 为什么mat select不';当正常选择执行时,是否执行ngModel值?,angular,drop-down-menu,angular-material,angular2-ngmodel,Angular,Drop Down Menu,Angular Material,Angular2 Ngmodel,我在应用程序中使用角度材质,因此我使用选择框的mat表单字段mat select和mat选项标记 我为它创建了一个子组件,并将其添加到父组件中。当我使用: <mat-form-field> <mat-select ...> <mat-option ...></option> </mat-select> </mat-form-field> 并将ngModel传递给父级,因为它无法按预期
mat表单字段mat select
和mat选项
标记
我为它创建了一个子组件,并将其添加到父组件中。当我使用:
<mat-form-field>
<mat-select ...>
<mat-option ...></option>
</mat-select>
</mat-form-field>
并将ngModel
传递给父级,因为它无法按预期工作。关于双向绑定和ngModel
但当我使用普通/经典时,请选择:
然后它直接工作
这是两种情况下的一个例子
你知道这种奇怪的行为会有什么问题吗?你的例子抛出了一个错误:
Error: Uncaught (in promise): Error: No value accessor for form control with name: 'Users'
我无法解释经典的select是如何工作的,但是MatSelect
不工作的原因是该错误-您没有在表单中正确使用ngModel
-您需要在DataListComponent
中实现ControlValueAccessor
。ControlValueAccessor
实现负责在模型更改时更新表单-没有它,模型更改不会传播回表单
有可能是MatSelect
(不使用select元素)依赖于经典select所不依赖的东西,并且由于它的工作方式不同。是的,我看到了错误。我确实修好了。演示ngDefaultControl
中缺少以下内容。错误现在已被删除。这并没有解决我的问题,但它鼓励我改变关于自定义表单/选择框的概念。我使用ControlValueAccessor
对其进行了更改,效果很好。对于表单元素的其余部分,使用ControlValueAccessor
还有一个很好的理由。