山一程--技术框架--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


浙公网安备 33010602011771号