以反应形式设置图像 url 在角度 2 中给出错误

Posted

技术标签:

【中文标题】以反应形式设置图像 url 在角度 2 中给出错误【英文标题】:Setting imge url in reactive form is giving error in angular2+ 【发布时间】:2020-09-06 23:51:13 【问题描述】:

我正在开发 Angular 应用程序,我已成功从数据库中检索数据并尝试使用 patch Value 方法设置表单控件的值,但不幸的是我遇到了错误 即

core.js:6185 ERROR DOMException: 未能在“HTMLInputElement”上设置“value”属性:此输入元素接受文件名,该文件名只能以编程方式设置为空字符串。

下面是我的代码片段

组件.ts

 ngOnInit(): void 
this.EditForm();

this.GetValues() //method where I am retreiving data from firebase and iside it I am calling set Value


 EditForm() 


    this.exampleForm = this.fb.group(
      imgurl: ['',Validators.required],
      title: ['', Validators.required],
      desc: ['', Validators.required],
      category: [this.selected, Validators.required],
      subcategory: ['  ', Validators.required],
      name: ['', Validators.required],
      privacy: ["true"],
    );
  

  setFormValue(d4) 
    this.imageSrc=d4.imgurl // this I have done to use string interpolation in template

    this.exampleForm.patchValue(
     imgurl:this.imageSrc,
      title:d4.title,
      desc:d4.desc,
      category:d4.category,
      name:d4.name,
      privacy:d4.privacy
    )
  

component.html

<div class="col-md-8 col-sm-9 col-xs-9">
    <form class="create-form" [formGroup]="exampleForm" novalidate (ngSubmit)="onSubmit(exampleForm.value)">

        <div class="col-md-4 col-sm-3 col-xs-12">
            <input type="file" multiple (change)="detectFiles($event) "
            accept="image/x-png,image/gif,image/jpeg" 
            class="form-control" 
             formControlName="imgurl">
            <img id="imgid"
               
            class="img-rounded" 
             [src]="imageSrc || 'http://placehold.it/180'"  />

  </div>


//rest of form controls

但是当我看到我的提交按钮被禁用时,即使所有表单控件都具有价值。当我在检查器中检查时,我发现 img 控制器有 ng-invalid。我不确定的原因可能是什么。请在这里帮助我

【问题讨论】:

这个答案可能会有所帮助:***.com/questions/49970970/… 【参考方案1】:

不允许以编程方式设置图像,因为它可能导致安全问题并对数据库产生严重影响。所以你可以做的是按照我的回答

步骤 1 组件.ts

     EditForm() 
        this.exampleForm = this.fb.group(
          imgurl: [''],               // remove required validator so invalid will go away

        );
      

    setFormValue(d4) 
        this.imageSrc=d4.imgurl   // string inerpollation
        this.downloadURL=d4.imgurl  //this value we will send to database
        this.exampleForm.patchValue(

          title:d4.title,
         ...// your other form values
        )
      

      onSubmit(value: UPost) 

        this.yourservice.update(this.id, this.d4[this.id],value,this.downloadURL)
    

service.ts

update(id, value, formvalue, imgurl) 
    this.postdata = 
      title: formvalue.title,
       imgurl: imgurl,

      ...// your formvalues

    
    console.log(value)

      this.http.patch(
        `https://write-your-heart-out-b338b.firebaseio.com/post/$this.uid/public/$this.db_key.json`, this.postdata)
        .subscribe()
    )
  

希望对你有帮助

【讨论】:

我可以看到它会工作,但我需要让 reuqurired 验证器工作 为什么你使用必需的验证器,这样用户就不会把那个字段留空。所以首先它的更新,所以默认情况下会有一些价值,因为你从数据库中获取数据。所以没有意义提供所需的验证器。尽管即使您想要所需的验证器,您也可以正确一些自定义验证 其实我错过了在更新部分会有一些来自数据库的值,所以它不会为空

以上是关于以反应形式设置图像 url 在角度 2 中给出错误的主要内容,如果未能解决你的问题,请参考以下文章

角度反应形式 - 验证变化和模糊两者

如何在角度 2 中以反应形式重置验证器?

角度测试以反应形式提交事件

动态键/值形式反应角度 5

显示角度反应形式错误消息的最佳方法,一个表单控制多个验证错误?

无法以角度反应形式获得 FormArray 结构