Angular 无法使用multipart/formdata更新实体-NgRx数据

Angular 无法使用multipart/formdata更新实体-NgRx数据,angular,ngrx,ngrx-data,Angular,Ngrx,Ngrx Data,我正在尝试更新我的一个实体,它也有文件上传功能。我可以使用add方法发送(添加)FormData,但无法更新。NgRx给出以下错误: 错误:主键不能为空/未定义 这可能吗?还是我做错了什么。请查看以下代码: const ad={ id:form.id, accountId:this.accountId } const data=新表单数据(); data.append('ad',JSON.stringify(ad)); //照片是一组上传的文件 如果(此。照片。长度){ this.photos

我正在尝试更新我的一个实体,它也有文件上传功能。我可以使用add方法发送(添加)FormData,但无法更新。NgRx给出以下错误:

错误:主键不能为空/未定义

这可能吗?还是我做错了什么。请查看以下代码:

const ad={
id:form.id,
accountId:this.accountId
}
const data=新表单数据();
data.append('ad',JSON.stringify(ad));
//照片是一组上传的文件
如果(此。照片。长度){
this.photos.forEach(photo=>{
数据。附加('of fure_ad',photo,photo['name']);
});
}
//NgRx数据更新方法
this.adService.update(数据)尝试下面的代码

const ad={
id:form.id,
accountId:this.accountId
}
const data=新表单数据();
data.append('ad',JSON.stringify(ad));
//照片是一组上传的文件
如果(此。照片。长度){
this.photos.forEach(photo=>{
数据。附加('of fure_ad',photo,photo['name']);
});
}
//发送广告如下

this.adService.update(数据,ad)您必须创建一个DataService类并使用这样的自定义更新函数

@Injectable()
export class PromotionDataService extends DefaultDataService<Promotion> {

  httpClient: HttpClient;

  constructor(httpClient: HttpClient, httpUrlGenerator: HttpUrlGenerator) {
    super('Promotion', httpClient, httpUrlGenerator);
    this.httpClient = httpClient;
  }

  updatePromotion(promotionId: string, formData: FormData): Observable<Promotion> {

    formData.append('_method', 'PUT');

    return this.httpClient.post(`${environment.apiUrl}/api/v1/manager/promotion/` + promotionId, formData)
      .pipe(map((response: Promotion) => {
        return response;
      }));
  }
}
在您的组件中,首先在构造函数中注入数据服务,然后您可以像这样使用自定义更新函数

  onSubmit() {

    if (this.promotionForm.invalid) {
      return;
    }

    const newPromotion: Promotion = this.promotionForm.value;

    const fileControl = this.f.banner;

    let files: File[];
    let file: File = null;

    if(fileControl.value){
      files = fileControl.value._files
    }

    if(files && files.length > 0) {
      file = files[0];
    }

    const formData = new FormData();

    if(file != null){
      formData.append('banner', file, file.name);
    }

    formData.append('data', JSON.stringify(newPromotion));

    this.service.updatePromotion(promotion.id, formData)

  }

是否在请求中发送主键?update方法的第二个参数仅接受EntityActionOptions类型。我们不能在那里传递任何东西。嗯,这是NgRx数据的内置方法。您对NgRx数据库有良好的了解吗@拉吉
  onSubmit() {

    if (this.promotionForm.invalid) {
      return;
    }

    const newPromotion: Promotion = this.promotionForm.value;

    const fileControl = this.f.banner;

    let files: File[];
    let file: File = null;

    if(fileControl.value){
      files = fileControl.value._files
    }

    if(files && files.length > 0) {
      file = files[0];
    }

    const formData = new FormData();

    if(file != null){
      formData.append('banner', file, file.name);
    }

    formData.append('data', JSON.stringify(newPromotion));

    this.service.updatePromotion(promotion.id, formData)

  }