Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么mat select不';当正常选择执行时,是否执行ngModel值?_Angular_Drop Down Menu_Angular Material_Angular2 Ngmodel - Fatal编程技术网

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
还有一个很好的理由。