Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.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 为什么我能';t防止用户编辑预处理表单字段值?_Angular_Primeng_Angular Reactive Forms_Angular Forms - Fatal编程技术网

Angular 为什么我能';t防止用户编辑预处理表单字段值?

Angular 为什么我能';t防止用户编辑预处理表单字段值?,angular,primeng,angular-reactive-forms,angular-forms,Angular,Primeng,Angular Reactive Forms,Angular Forms,我正在使用预处理处理一个角度项目,我发现在尝试禁用对字段中文本表单的编辑时存在以下困难 基本上,在我的组件的HTML代码中,我有如下内容: <input id="disabled-input" type="text" pInputText [disabled]="disabled" formControlName="UID" /> 然后在这个组件的

我正在使用预处理处理一个角度项目,我发现在尝试禁用对字段中文本表单的编辑时存在以下困难

基本上,在我的组件的HTML代码中,我有如下内容:

<input id="disabled-input"
       type="text"
       pInputText
       [disabled]="disabled"
       formControlName="UID" />
然后在这个组件的TypeScript代码中,我声明了这个变量:

disabled = true;
因此,我希望输入字段编辑被禁用,但事实上,我得到的是:

奇怪的是,以这种方式在另一个组件中工作。唯一的区别是,在另一个组件中,文件不绑定到表单,而是使用[(ngModel)]绑定字段值,方式如下:

    <input id="disabled-input"
           type="text"
           pInputText
           [disabled]="disabled"
           [(ngModel)]="orderDetail.UID" />

在第二种情况下,它工作正常,用户无法编辑字段值


为什么在第一种情况下,我不能阻止用户编辑字段值?我可以获得这种行为吗?

第一种情况不起作用,因为它混合了模板驱动和反应式表单。从:

模板驱动的表单依赖于模板中的指令来创建和修改 操纵底层对象模型。它们对于添加 应用程序的简单表单,如电子邮件列表注册表单。它们很简单 添加到应用程序中,但它们的伸缩性不如反应式表单。如果 您有非常基本的表单需求和可以管理的逻辑 仅在模板中,模板驱动的表单就非常适合

IMO避免使用生产软件的模板表单。它们没有足够的可伸缩性和可测试性

对于被动表单,需要禁用表单控件

this.formGroup.get('UID').disable();

尝试在组件中设置disabled(禁用),而不是将其作为html属性,
[disabled]
属性在被动形式中是不允许的(至少您会得到警告)<代码>this.myGroup.get('UID').disable()
this.formGroup.get('UID').disable();