山一程--技术框架--web 技术--UI--angular

目的:记录 angular 点滴


 1. localStorage 数据的获取


前后端分离:

Angular , Http 传文件的话,用 FormData 格式

数据双向绑定 [( ngModel )] = " " 所得到的是字符串"c:/facadePath/xxxFileName.zip ,  相当于是文件名。而非 file 类型.

 1 <form name="upload" enctype="multipart/form-data" method="post" novalidate #form="ngForm" (ngSubmit)="submitForm(form)">
 2 
 3   <div class="form-group">
 4     <label>process:</label>
 5     <input name="specifyProcess" class="form-control" [(ngModel)]="upload.specifyProcess" />
 6   </div>
 7 
 8   <div class="form-group">
 9     <label>ground truth:</label>
10     <input type="file" id="groundTruth" name="groundTruth" (change)="selectGroundTruthFile($event)"  required />
11   </div>
12 
13   <div class="form-group">
14     <label>validation:</label>
15     <input type="file" id="validation" name="validation" (change)="selectValidationFile($event)"/>
16   </div>
17 
18   <button type="submit" class="btn btn-primary m-1" [disabled]="form.invalid">
19     submit
20   </button>
21 
22   <button type="reset" class="btn-primary m-1" routerLink="/">
23     cancel
24   </button>
25 
26 </form>

component.ts 中使用 event.files[0] ,  formData 处理

 1 import {Component} from "@angular/core";
 2 import {UploadModel} from "../module/upload.model";
 3 import {NgForm} from "@angular/forms";
 4 import {HttpClient} from "@angular/common/http";
 5 
 6 @Component({
 7   selector:"upload",
 8   templateUrl:"upload.component.html"
 9 })
10 
11 export class UploadComponent{
12 
13   upload:UploadModel= new UploadModel();
14 
15   constructor(private httpClient: HttpClient){ }
16 
17   submitForm(form:NgForm){
18 
19     if(form.valid){
20 
21       let resData:any;
22       // @ts-ignore
23       const formData:FormData = new FormData();
24 
25       // @ts-ignore
26       formData.append("specifyProcess", this.upload.specifyProcess);
27       formData.append("groundTruth",this.upload.groundTruth);
28       formData.append("validation",this.upload.validation);
29 
30       this.httpClient.post(`http://localhost:2023/legacy/regression/selection/upload`, formData)
31         .subscribe(res=>resData = res);
32     }
33   }
34 
35   selectGroundTruthFile(e:any){
36     this.upload.groundTruth = e.target.files[0];
37   }
38 
39   selectValidationFile(e:any){
40     this.upload.validation = e.target.files[0];
41   }
42 }

upload 对象:

1 export class UploadModel{
2 
3   constructor(public specifyProcess?:string,
4               public groundTruth?: any,
5               public validation?: any){}
6 }

 

 


 


Rest request , post 


 

这种组合方式,数据必须是 { } 结构,否则数据无法路由.

 

 

 

 


spring boot web config:


angular 跨域,在 spring boot 后端 @CrossOrigin 注解

 

 注意文件上传限制:

注意安全组件,会对无安全认证的访问拦截. 


组件A  路由跳转 带数据对象 给 组件B

嵌套组合对象.

组件A 从后端获取到 JSON 类型数据后, 提取部分对象, 流程转到

组件B. 出现情况为: [object object] 或其他错误,原因在于:

1.组件A 要将 数据使用JSON.stringify( data ) 

2.组件B 在通过 activatedRouter 接收时,JSON.parse( data )  组装为对象.

routing:


 Angular 数据包含有 boolean 字段 , 向 Spring boot 后端post 时, 后端对应的字段,也是 boolean 类型。

但是后端会报错, 前端的 boolean 类别无法 matchType missed.


 前端JS 部分构建对象,后端Spring 注解需要对应.

出现过的错误:

 



Angular constructure 生命周期

subscribe 非同步顺序.

应该在 constructure 完成初始化,  onInit 次之,但注意要是在 componeng 内



父子组件数据分发, 组合式页面

父页面 selector 标识各子页面

父组件申明子组件所需数据对象

子组件便可使用对应的对象。

 

 


 2022-12-09

Angular 前端 enum 的字段值要匹配. 


2022-12-10 

虽未用, 记录下相关的 date 转换

 


2023-02-19 

场景:单页面上内容发生变化,流程的流转. 

结构型指令: *ngIf 配合template, 参考 <Angular 高级编程 4nd> chapter 16章, p320

 

posted @ 2022-07-07 09:07  君子之行  阅读(11)  评论(0)    收藏  举报