为什么普通选择会执行mat-select而不执行ngModel值?

时间:2018-07-09 18:11:15

标签: angular drop-down-menu angular-material angular2-ngmodel

我在应用中使用了棱角材质,因此我在选择框中使用了mat-form-field mat-selectmat-option标签。

我为此创建了一个子组件并将其添加到父组件中。当我使用时:

<mat-form-field>
    <mat-select ...>
         <mat-option ...></option>
    </mat-select>
</mat-form-field> 

,然后将ngModel传递给父级,则无法正常工作。关于绑定和ngModel

的两种方式,没有通过任何赞扬

但是当我使用普通/经典select时:

<select ...> <option ....></option> </select>

然后直接运行。

这两种情况都是StackBlitz Demo with the complete code

任何想法都可能导致这种奇怪行为吗?

1 个答案:

答案 0 :(得分:1)

您的示例抛出错误:

Error: Uncaught (in promise): Error: No value accessor for form control with name: 'Users'

我无法解释经典选择是如何工作的,但是该错误表明了MatSelect不起作用的原因-您没有以某种形式正确使用ngModel-您需要在ControlValueAccessor中实现DataListComponentControlValueAccessor实现负责在模型更改时更新表单-没有它,模型更改不会传播回表单。

MatSelect(不使用select元素)有可能依赖于经典select所不依赖的东西,因此它不能以相同的方式起作用。