服务¶
服务可以看作一个工具类,或者是前台与后台交互中,中间的那一层
理想的情况下,组件应该只处理用户与前台的交互,所有数据,比如从服务器获取数据,验证用户输入的值等操作都应该由服务层来处理
首先创建一个服务:
1 | ng generate service tool |
这个命令会创建一个名为tool的服务,会在项目中创建两个文件
- tool.service.ts
- tool.service.spec.ts
一般我们只需要在tool.service.ts中写代码就行了
在tool.service.ts中写入:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class ToolService { constructor() { } public getList(): string[]{ return ["1", "2", "3", "", "1"]; } } |
这里新加了一个getList方法,这个方法会返回一个string数组
然后在app.component.ts写入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import { Component, OnInit } from '@angular/core'; import { ToolService } from './tool.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit{ constructor(private toolService: ToolService) { } strList: string[] = []; ngOnInit(){ this.strList = this.toolService.getList(); } detailClick(event: string){ alert("detail " + event + " click"); } } |
这样,app组件在初始化时就会使用tool服务的getList方法给strList赋值
依赖注入¶
这个service用了一个@Injectable装饰器,这代表angular会把这个类标记为依赖注入系统的参与者之一
依赖注入详细可以参考https://angular.cn/guide/architecture-services#dependency-injection-di
简单来说可以看作一个全局的静态类,可以在组件初始化时传入,给组件进行数据操作
使用命令创建的服务会自动加上依赖注入的@Injectable装饰器
想要在组件中依赖注入,只要写入:
1 | constructor(private toolService: ToolService) { } |
这段代码的意思是,组件初始化时,将ToolService注入到组件中
constructor就是初始化的方法,ToolService就是之前创建的服务类名