掌握Angular2的服务(service)
这篇文章我们来讲解如何使用 如果你看了上一篇文章Step 5 - Dependency Injection,你就会发现我们这一部分讲解的内容和上一篇有很多的相似之处;当然也有一些新的知识点,温故而知新嘛;好了让我们来开始今天的旅行吧. 首先我们还是切换回之前的quickstart版本,然后运行: npm run start 可以看到 首先我们来完成第一部分,修改 <h1>My First Angular2 Travel</h1> 然后我们来进行第二个工作,创建我们的 export class User { //id: number; //name: string; constructor( private id: number,private name: string ){} } 上面注释的部分是这个 最后一项工作就是来创造我们的模拟数据,我们现在还没有学习如何在 import {User} from "../classes/User"; export const USERS: User[] = [ {id: 1,name: 'dreamapple1'},{id: 2,name: 'dreamapple2'},{id: 3,name: 'dreamapple3'},{id: 4,name: 'dreamapple4'},{id: 5,name: 'dreamapple5'},{id: 6,name: 'dreamapple6'},{id: 7,name: 'dreamapple7'},{id: 8,name: 'dreamapple8'} ]; 可以看到,我们导出了一个数组,这个数组的每一个元素都是一个 接下来,我们就要步入今天的主题了;构建一个服务,这个服务能够获取我们刚刚书写的模拟数据;首先不要忘记的是, import {User} from "../classes/User"; import {USERS} from "../mock/user.data"; export class UserService { getUsers(): User[] { return Promise.resolve(USERS); } } 关于上面代码的一些解释:因为我们的 接下来我们就要使用这个服务了,如何使用这个服务呢?在上一章节中我们已经讲解了许多种使用服务的方法;现在我们使用最简单的一种方式,直接使用 import {Component} from '@angular/core'; import {User} from "./classes/User"; import {UserService} from "./services/user.service"; /* * 别忘记了使用@前缀 * 这里相当于组件视图 */ @Component({ selector: 'my-app',//template: '<h1>My First Angular2 Travel</h1>',templateUrl: 'app/templates/main.html',providers: [UserService] }) /* * 导出这个组件,也就是一个类 * 这里相当于组件控制器 */ export class AppComponent { users: User[]; constructor(private userService: UserService){ //noinspection TypeScriptUnresolvedFunction this.userService.getUsers().then( users => this.users = users ) } } 我们也要改动 <h1>My First Angular2 Travel</h1> <ul> <li *ngFor="let user of users">{{user.name}}</li> </ul> 这时我们打开浏览器,就会看到我们想要的结果: 上面的写法是有一些问题的,构造函数是为了简单的初始化工作而设计的,比如把构造函数的参数赋值给属性.它的负担不应该过于沉重.所以我们把数据的获取放在了组件的生命周期的钩子函数中去,如果你不了解组件的生命周期的话,那么你可以看看这里,在这里我们使用了 import {Component,OnInit} from '@angular/core'; import {User} from "./classes/User"; import {UserService} from "./services/user.service"; /* * 别忘记了使用@前缀 * 这里相当于组件视图 */ @Component({ selector: 'my-app',也就是一个类 * 这里相当于组件控制器 */ export class AppComponent implements OnInit{ users: User[]; constructor( private userService: UserService ){} getUsersData() { this.userService.getUsers() .then(users => this.users = users); } ngOnInit() { this.getUsersData(); } } 上面代码的一些解释,首先我们在 最后,我们还可以更真实的的去模拟从服务器读取数据的操作;我们可以通过使用 import {User} from "../classes/User"; import {USERS} from "../mock/user.data"; export class UserService { getUsers(): Promise<User[]> { return Promise.resolve(USERS); } getMockUsers(): Promise<User[]> { return new Promise(resolve => setTimeout(resolve(USERS),2000)) .then(() => this.getUsers()); } } 首先需要注意的一点是,我们之前写的代码把 其实我们的程序里还有一个小错误,不容易被发现;当我在构建的时候我发现了下面的错误: 它提醒我们说, export class User { id: number; name: string; //constructor( // private id: number,// private name: string //){} } 在TypeScript里,每个成员默认为是public的.所以上面的写法是很简便的. 到这里我们要说的内容已经说完了,源代码可以参考这里angular2-travel,当然欢迎批评指正. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |