版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前端Ionic框架规范书一、项目结构规范1.基础目录结构Ionic项目应遵循清晰的模块化目录结构,确保代码的可维护性和可扩展性。标准目录结构如下:src/├──app/#应用核心模块│├──components/#公共组件│├──pages/#页面组件│├──services/#服务层│├──models/#数据模型定义│├──guards/#路由守卫│├──interceptors/#HTTP拦截器│├──app-routing.module.ts#路由配置│└──app.module.ts#根模块├──assets/#静态资源│├──images/#图片资源│├──fonts/#字体文件│└──data/#静态数据文件├──environments/#环境配置│├──environment.ts#开发环境│└──d.ts#生产环境└──theme/#主题样式├──variables.scss#全局样式变量└──global.scss#全局样式2.目录命名规则所有目录名称采用小写短横线分隔式(kebab-case),例如user-profile、product-list。页面组件目录应与路由路径保持一致,便于快速定位。公共组件按功能模块划分目录,例如ui-components、form-components。3.文件命名规则组件文件:采用大驼峰式(PascalCase)命名,例如UserProfilePage.ts、ProductCardComponent.ts。服务文件:采用小驼峰式(camelCase)命名,后缀为.service.ts,例如user.service.ts、api.service.ts。模型文件:采用大驼峰式命名,后缀为.model.ts,例如User.model.ts、Product.model.ts。样式文件:与组件文件同名,后缀为.scss,例如UserProfilePage.scss。二、代码开发规范1.TypeScript编码规范1.1变量与函数命名变量和函数名采用小驼峰式命名,例如userName、getUserInfo()。常量名采用大写下划线分隔式(UPPER_SNAKE_CASE),例如MAX_RETRY_COUNT、API_BASE_URL。类名和接口名采用大驼峰式命名,例如UserService、ProductInterface。1.2类型注解所有变量、函数参数和返回值必须添加类型注解,禁止使用any类型,除非有明确的业务需求。复杂数据结构应定义接口或类型别名,例如:interfaceUser{id:number;name:string;email:string;createdAt:Date;}typeProductStatus='active'|'inactive'|'draft';1.3类与组件开发组件类名应与文件名保持一致,采用大驼峰式命名。组件的输入属性(@Input())和输出属性(@Output())应明确命名,并添加注释说明。避免在组件类中编写复杂业务逻辑,应将业务逻辑抽离到服务层。使用async/await替代Promise链式调用,提高代码可读性://推荐asyncgetUserInfo():Promise<User>{try{constresponse=awaitthis.http.get<User>(`${API_BASE_URL}/user`);returnresponse;}catch(error){console.error('获取用户信息失败:',error);throwerror;}}//不推荐getUserInfo():Promise<User>{returnthis.http.get<User>(`${API_BASE_URL}/user`).pipe(catchError(error=>{console.error('获取用户信息失败:',error);throwerror;})).toPromise();}2.HTML模板规范2.1模板结构每个页面模板应包含一个主容器元素,通常使用<ion-content>或<divclass="container">。模板代码应按逻辑模块划分,使用注释分隔不同功能区块。避免在模板中编写复杂的条件判断和循环逻辑,应通过组件类的属性或方法处理。2.2Ionic组件使用优先使用Ionic提供的UI组件,如<ion-button>、<ion-card>、<ion-list>等,保持应用风格统一。组件属性应采用小写短横线分隔式命名,例如button-type、card-header。合理使用Ionic的网格系统(Grid)进行页面布局,避免使用硬编码的像素值。2.3数据绑定使用插值表达式{{}}展示数据,避免在模板中进行复杂的计算。事件绑定应使用(event)语法,例如(click)="onButtonClick()"。属性绑定应使用[property]语法,例如[disabled]="isButtonDisabled"。3.CSS/Sass样式规范3.1样式文件结构全局样式统一写在src/theme/global.scss中,包含重置样式、通用类样式。组件样式写在对应的.scss文件中,使用组件选择器进行样式隔离。主题变量定义在src/theme/variables.scss中,包括颜色、字体、间距等。3.2命名规则类名采用小写短横线分隔式命名,例如header、product-card。BEM命名规范:对于复杂组件,可采用BEM(Block-Element-Modifier)命名方法,例如:.product-card{/*Block*/padding:16px;&__title{/*Element*/font-size:18px;}&--highlighted{/*Modifier*/border:2pxsolid#007bff;}}3.3样式编写原则避免使用!important声明,除非有特殊的样式覆盖需求。优先使用Ionic提供的CSS变量进行样式定制,例如--ion-color-primary、--ion-font-family。响应式设计:使用媒体查询适配不同屏幕尺寸,优先使用Ionic的断点系统:@media(min-width:768px){.container{max-width:720px;margin:0auto;}}三、组件开发规范1.组件分类页面组件:对应应用的各个页面,包含完整的页面布局和业务逻辑,例如HomePage、UserProfilePage。公共组件:可复用的UI组件,例如HeaderComponent、FooterComponent、LoadingSpinnerComponent。业务组件:与具体业务逻辑相关的组件,例如ProductCardComponent、OrderItemComponent。2.组件设计原则单一职责原则:每个组件只负责一个明确的功能,避免组件过于庞大。可复用性:公共组件应设计为通用组件,通过输入属性接收配置参数。无状态组件:对于纯展示型组件,应设计为无状态组件,通过输入属性传递数据。3.组件通信方式父子组件通信:通过@Input()和@Output()进行数据传递和事件触发。跨组件通信:使用服务(Service)进行数据共享,或使用RxJS的Subject进行事件发布订阅。路由参数传递:通过路由参数传递页面间的必要数据,例如/product/:id。4.组件示例//ponent.tsimport{Component,Input}from'@angular/core';import{Product}from'../models/product.model';@Component({selector:'app-product-card',templateUrl:'./ponent.html',styleUrls:['./ponent.scss']})exportclassProductCardComponent{@Input()product:Product;onProductClick(){console.log('Productclicked:',duct);}}<!--ponent.html--><ion-card(click)="onProductClick()"><ion-img[src]="product.imageUrl"></ion-img><ion-card-header><ion-card-title>{{}}</ion-card-title><ion-card-subtitle>${{product.price}}</ion-card-subtitle></ion-card-header><ion-card-content>{{product.description}}</ion-card-content></ion-card>四、服务开发规范1.服务分类数据服务:负责与后端API交互,获取和提交数据,例如UserService、ProductService。工具服务:提供通用的工具方法,例如StorageService、ValidationService。状态管理服务:管理应用的全局状态,例如AuthService、CartService。2.服务设计原则单一职责原则:每个服务只负责一个业务领域的功能。可注入性:服务应使用@Injectable()装饰器,并且在根模块中提供,确保全局单例。错误处理:服务中的异步操作应包含错误处理逻辑,避免错误冒泡到组件层。3.服务示例//user.service.tsimport{Injectable}from'@angular/core';import{HttpClient,HttpErrorResponse}from'@angular/common/http';import{Observable,throwError}from'rxjs';import{catchError,map}from'rxjs/operators';import{User}from'../models/user.model';import{environment}from'../../environments/environment';@Injectable({providedIn:'root'})exportclassUserService{privateapiUrl=`${environment.apiBaseUrl}/users`;constructor(privatehttp:HttpClient){}getUsers():Observable<User[]>{returnthis.http.get<User[]>(this.apiUrl).pipe(catchError(this.handleError));}getUserById(id:number):Observable<User>{returnthis.http.get<User>(`${this.apiUrl}/${id}`).pipe(catchError(this.handleError));}createUser(user:User):Observable<User>{returnthis.http.post<User>(this.apiUrl,user).pipe(catchError(this.handleError));}privatehandleError(error:HttpErrorResponse){if(error.errorinstanceofErrorEvent){//客户端或网络错误console.error('Anerroroccurred:',error.error.message);}else{//后端返回错误console.error(`Backendreturnedcode${error.status},`+`bodywas:${error.error}`);}//返回用户友好的错误消息returnthrowError('Somethingbadhappened;pleasetryagainlater.');}}五、路由规范1.路由配置路由配置统一写在src/app/app-routing.module.ts中。路由路径采用小写短横线分隔式命名,例如/user-profile、/product-list。子路由应合理嵌套,例如:constroutes:Routes=[{path:'',redirectTo:'home',pathMatch:'full'},{path:'home',component:HomePage},{path:'products',component:ProductListPage,children:[{path:':id',component:ProductDetailPage}]},{path:'**',component:NotFoundPage}];2.路由守卫对于需要权限验证的路由,应使用路由守卫(Guard)进行访问控制。常见的路由守卫类型:CanActivate:控制是否允许进入路由。CanDeactivate:控制是否允许离开路由。Resolve:在路由激活前预加载数据。3.路由导航在组件中使用Router服务进行导航,例如:import{Router}from'@angular/router';constructor(privaterouter:Router){}navigateToProductDetail(productId:number){this.router.navigate(['/products',productId]);}在模板中使用routerLink指令进行导航,例如:<ion-button[routerLink]="['/products',product.id]">查看详情</ion-button>六、状态管理规范1.状态管理方案对于小型应用,可使用Angular的服务和RxJS进行状态管理。对于中大型应用,推荐使用NgRx或Akita等专门的状态管理库。2.状态设计原则单一数据源:应用的状态应集中存储在一个地方。不可变性:状态更新应返回新的状态对象,避免直接修改原状态。可预测性:状态变更应通过纯函数进行,确保相同输入产生相同输出。3.RxJS状态管理示例//auth.service.tsimport{Injectable}from'@angular/core';import{BehaviorSubject,Observable}from'rxjs';import{User}from'../models/user.model';@Injectable({providedIn:'root'})exportclassAuthService{privatecurrentUserSubject:BehaviorSubject<User|null>;publiccurrentUser:Observable<User|null>;constructor(){constsavedUser=localStorage.getItem('currentUser');this.currentUserSubject=newBehaviorSubject<User|null>(savedUser?JSON.parse(savedUser):null);this.currentUser=this.currentUserSubject.asObservable();}publicgetcurrentUserValue():User|null{returnthis.currentUserSubject.value;}login(user:User){localStorage.setItem('currentUser',JSON.stringify(user));this.currentUserSubject.next(user);}logout(){localStorage.removeItem('currentUser');this.currentUserSubject.next(null);}}七、性能优化规范1.懒加载页面组件应使用懒加载方式加载,减少初始包体积,例如:constroutes:Routes=[{path:'products',loadChildren:()=>import('./pages/product-list/product-list.module').then(m=>m.ProductListPageModule)}];2.变更检测优化对于复杂组件,可使用ChangeDetectionStrategy.OnPush变更检测策略,提高性能。使用async管道自动订阅和取消订阅Observable,避免内存泄漏。3.图片优化图片资源应进行压缩,优先使用WebP格式。使用Ionic的<ion-img>组件,支持懒加载和图片缩放。4.缓存策略对于不经常变化的数据,可使用本地存储(LocalStorage或IndexedDB)进行缓存。使用HTTP拦截器实现请求缓存,避免重复请求相同数据。八、代码质量规范1.代码审查所有代码提交前必须经过代码审查,确保符合规范。代码审查重点关注:代码逻辑的正确性和可读性。潜在的性能问题和内存泄漏。安全漏洞,如XSS攻击、SQL注入等。2.静态代码分析使用ESLint进行代码质量检查,配置规则包括:TypeScript语法检查。代码风格一致性检查。潜在错误检测。3.单元测试核心业务逻辑和服务应编写单元测试,测试覆盖率不低于80%。使用Jasmine和Karma进行单元测试,例如://user.service.spec.tsimport{TestBed}from'@angular/core/testing';import{HttpClientTestingModule,HttpTestingController}from'@angular/common/http/testing';import{UserService}from'./user.service';import{User}from'../models/user.model';import{environment}from'../../environments/environment';describe('UserService',()=>{letservice:UserService;lethttpMock:HttpTestingController;constapiUrl=`${environment.apiBaseUrl}/users`;beforeEach(()=>{TestBed.configureTestingModule({imports:[HttpClientTestingModule],providers:[UserService]});service=TestBed.inject(UserService);httpMock=TestBed.inject(HttpTestingController);});afterEach(()=>{httpMock.verify();});it('shouldbecreated',()=>{expect(service).toBeTruthy();});it('shouldgetusers',()=>{constmockUsers:User[]=[{id:1,name:'JohnDoe',email:'john@'},{id:2,name:'JaneSmith',email:'jane@'}];service.getUsers().subscribe(users=>{expect(users.length).toBe(2);expect(users).toEqual(mockUsers);});constreq=httpMock.expectOne(apiUrl);expect(req.request.method).toBe('GET');req.flush(mockUsers);});});九、安全规范1.XSS防护避免使用innerHTML属性插入HTML内容,除非内容是可信的。使用Angula
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运营部团队考评表
- 和谐校园从我做起:小学生文明礼仪教育小学主题班会课件
- 教育工作者教学质量与学生进步绩效评定表
- 服装行业智能制造与个性设计方案
- 考古研究员绩效考核表
- 关于开展2026年市场调研的通知函7篇
- 中小学信息技术教育课程资源开发与应用指导书
- 产品测试流程规范十二项关键步骤手册
- JJF(纺织) 020-2024 织物厚度仪校准规范
- 安全主管安全事件绩效评定表
- 尾矿库闭库后的环境监测施工方案
- 消毒供应中心打包工作规范
- 2025国际胰腺病学会急性胰腺炎修订指南解读课件
- 异物来源及异物防止培训
- DB54T 0275-2023 民用建筑节能技术标准
- 六年级语文非连续性文本阅读真题20套
- 医防融合培训课件
- 2025年货运驾驶员安全培训试题及答案
- 学堂在线 生活、艺术与时尚:中国服饰七千年 期末考试答案
- 【真题】青岛版四年级下学期期末数学考试卷(含解析)2024-2025学年山东省潍坊市诸城市
- 大豆异黄酮对安格斯肉牛免疫性能、抗氧化能力及血清代谢物的影响
评论
0/150
提交评论