Angular 2.x折腾记 :(3)初步了解服务及使用

简介: 不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;


前言


不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;


什么是服务


简言之:就是资源获取,以及通讯逻辑处理的地方;


我看github上有些项目的service写的很复杂(很重),但是我不大喜欢这样,

我力求service内少处理复杂逻辑,这可能和每个人的开发理念不一样,举一个例子,看代码。


// vehicle-fault.service.ts 
// 服务类必须引入这个
import { Injectable } from '@angular/core';
// 自己封装的鉴权
import { AuthService } from '../../../services/auth.service';
// 我这里存放了接口请求地址还有一些公用信息。nginx做反向代理所以不走baseurl
import { environment } from '../../../../environments/environment';
// 不可忘记括号,任何装饰器都一样,防止莫名的错误
@Injectable()
export class VehicleFaultService {
// DI(依赖注入)  
// 常规的写法 this.authHttp = new AuthService();
// 这个写法也是可以的,官方不推荐,说不好维护(当项目大起来的时候)
constructor(private authHttp: AuthService) { }
// 获取故障提示列表
VehicleFaultList(data) {
  return this.authHttp.post(environment.baseUrl + 'VehicleFault/VehicleFaultList', data);
}
// 获取单个车辆的故障列表
SingleVehicleFaultList(data) {
  return this.authHttp.post(environment.baseUrl + 'VehicleFault/SingleVehicleFaultList', data);
}
// 根据车辆ID获取单车信息
VehicleDetail(data) {
  return this.authHttp.post(environment.baseUrl + 'Vehicle/VehicleDetail', data);
}
// 清除故障码
ClearFault(data) {
  return this.authHttp.post(environment.baseUrl + 'VehicleFault/ClearFault', data);
}
// 这里的每个接口返回一个可观察的订阅对象
}


那么我们应该如何让服务可以正常使用呢?


大致有那么两种;


  • 模块内注入,整个模块内的components皆可以使用


import { NgModule } from '@angular/core';  -- 内置
    // 除了根模块用BrowserModule,其他一些模块需要用到一些内置指令(*ngIf,*ngFor这些的)必须引入这个 -- 内置
    import { CommonModule } from '@angular/common'; 
    // 路由模块 -- 内置
    import { RouterModule } from '@angular/router';
    // 表单模块,及响应式表单模块 -- 内置
    import { FormsModule, ReactiveFormsModule } from '@angular/forms';
    import { VehicleFaultRoutes } from './vehicle-fault.routes';
    // service 
    import { VehicleFaultService } from './vehicle-fault.service';
    // component
    import { VehicleFaultComponent } from './vehicle-fault.component';
    import { ListComponent } from './list/list.component';
    import { DetailComponent } from './detail/detail.component';
    import { CleanComponent } from './clean/clean.component';
    // public module
    import { MitPipeModule } from '../../../widgets/mit-pipe/mit-pipe.module';
    import { MitDataTableModule } from '../../../widgets/mit-data-table/mit-data-table.module';
    import { MitAlertModule } from '../../../widgets/mit-alert/mit-alert.module';
    import { MitLoadingModule } from '../../../widgets/mit-loading/mit-loading.module';
    import { DepartmentSelectModule } from './../../../share/department-select/department-select.module';
    const mitModule = [
      MitPipeModule,
      MitDataTableModule,
      MitAlertModule,
      MitLoadingModule,
      DepartmentSelectModule
    ];
    @NgModule({
      imports: [ // 引入相关的模块
        ...mitModule,
        FormsModule,
        RouterModule,
        CommonModule,
        VehicleFaultRoutes
      ],
      declarations: [VehicleFaultComponent, ListComponent, DetailComponent, CleanComponent], // 声明组件
      providers: [VehicleFaultService] // 服务注入
      // providers : [{provide:vfualt, useClass:VehicleFaultService}] // 这是一种别名的写法
    })
    export class VehicleFaultModule { }


// 引入一些生命周期的控制,组件值传递响应接口等
import { Component, OnInit, AfterContentInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
// 引入路由模块
import { Router, ActivatedRoute } from '@angular/router';
// 基类
import { MitDataTableBase } from '../../../../widgets/mit-data-table/mit-data-table-base';
// 服务
import { VehicleFaultService } from '../vehicle-fault.service';
import { EventsService } from '../../../../services/events-service.service';
// 动画
import { fadeIn } from '../../../../animation/fadeIn';
@Component({
  selector: 'app-list',
  templateUrl: './list.component.html',
  styleUrls: ['./list.component.scss'],
  animations: [fadeIn]
})
export class ListComponent extends MitDataTableBase implements OnInit, OnDestroy {
  private getRenderList: any;
  private currentItem: any;
  private showAlert = false;
  constructor(
    private vehicleFaultService: VehicleFaultService, 
    private eventsService: EventsService, 
    private router: Router, 
    private activatedRoute: ActivatedRoute
  ) {
    super(router, activatedRoute);
  }
  ngOnInit() {
  }
}
// 若是要使用别名注入,还需要引入Inject,从core里面 -- 在components
// 然后放在construcor里面,写法如下
// constructor(@Inject('vfault') private vehicleFaultService: any)
// 这样就可以使用了,且在components内不需要引入对应的服务!!!!


  • 单一components内注入,自己使用


组件内用providers引入


// 服务
import { vehicleFaultService } from '../vehicle-fault.service';
import { EventsService } from '../../../../services/events-service.service';
// 动画
import { fadeIn } from '../../../../animation/fadeIn';
@Component({
  selector: 'app-list',
  templateUrl: './list.component.html',
  styleUrls: ['./list.component.scss'],
  animations: [fadeIn],
  providers: [vehicleFaultService, EventsService]
})


总结


  1. 服务若是结合@Inpu(),@Output(),感觉不需要ngrx这种状态管理


  1. 服务可以贯穿全局(全局注入),事件广播这些都可以实现


  1. 服务不应该太重(比如处理一些复杂的逻辑),一个服务内部应该清晰,简洁。

最最重要的,还是多查阅官方的API,然后动手实践,才能让你上手快起来。

目录
相关文章
|
3月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
231 0
|
3月前
|
前端开发 UED 开发者
无障碍设计的魔法:JSF让每个用户都能畅游数字世界!
【8月更文挑战第31天】本文介绍如何使用JavaServer Faces (JSF)构建无障碍Web应用,确保所有用户都能访问和使用。文章通过实际代码示例展示了如何利用ARIA属性增强组件、实现键盘导航、提供文本替代以及使用语义化标签等技术。无障碍设计不仅是道德责任,也是提升用户体验的关键。通过这些方法,JSF可以帮助开发者创建更加公平和包容的应用。
33 0
|
3月前
|
前端开发 数据处理 数据库
Angular与Firebase的完美联合:掌握实时数据同步技术——从环境配置到数据服务的详细实现指南
【8月更文挑战第31天】在现代Web应用中,实时数据同步对于提升用户体验至关重要。本文档详细介绍如何在Angular应用中集成Firebase实时数据库,包括准备工作、配置环境、实现实时数据同步及在组件中使用数据服务等步骤。通过本教程,开发者将掌握利用Angular与Firebase高效实现数据同步的方法,增强应用的实时互动性。
41 0
|
3月前
|
数据处理 开发者
深入解析Angular服务:构建可重用业务逻辑的最佳实践与模式——从基础创建到高级异步处理的全面指南
【8月更文挑战第31天】在Angular开发中,服务用于封装可重用的业务逻辑,有助于保持代码的DRY原则。本文详细介绍如何创建和使用服务,包括基础设置、逻辑封装及高级应用,如HTTP请求和异步数据处理,帮助你构建模块化、易维护的应用。通过示例展示,你将学会如何充分利用服务提升开发效率。
35 0
|
4月前
|
设计模式 JavaScript 测试技术
Angular服务与依赖注入机制详解
【7月更文挑战第17天】Angular的服务与依赖注入机制为构建模块化、可维护和可扩展的应用程序提供了强大的支持。通过合理定义和使用服务,以及利用依赖注入来管理依赖关系,我们可以编写出更加清晰、可维护和可测试的代码。希望本文能帮助你更好地理解和应用Angular的服务与依赖注入机制。
|
4月前
|
前端开发 JavaScript
前端框架与库 - Angular基础:组件、模板、服务
【7月更文挑战第16天】Angular,谷歌维护的前端框架,专注构建动态Web应用。组件是核心,包含行为逻辑的类、定义视图的模板和样式。模板语法含插值、属性和事件绑定。服务提供业务逻辑,依赖注入实现共享。常见问题涉及组件通信、性能和服务注入。优化通信、性能并正确管理服务范围,能提升应用效率和质量。学习组件、模板和服务基础,打造高效Angular应用。
63 1
|
6月前
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
|
6月前
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
|
JavaScript 前端开发 API
Angular 自定义服务 notification
比如,我们这篇文章要讲到的 notification 的实现。
Angular 自定义服务 notification
下一篇
无影云桌面