Angular2入门系列教程-服务

  上一篇文章 Angular2入门系列教程-多个组件,主从关系

  在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码

  Angular2中提供了依赖注入的概念,使得我们可以很优雅得做到这一点。这里简单描述下,依赖注入可以使我们在编写代码的时候不用使用new 去生成一个类,这样就达到了解耦的目的,更多关于依赖注入的知识我觉得不应该在这里讲解

  和其他方式类似,Angular2使用的是装饰器@Injectable()来描述以一个类是否可注入,我们本篇文章的目的,就是为了剥离数据获取的操作,提供一个可复用的可注入的服务。

  为了方便,我们直接在之前的data文件夹目录下建立一个blog.service.ts的文件,这个文件要干嘛呢?就是将之前的ArticleComponent中的获取blog的方法抽离出来,成为一个完全独立的模块,至于在ArticleComponent中,我们使用依赖注入的方式,将我们的服务注入进去,直接使用,看代码

  

import { Injectable } from ‘@angular/core‘;

import { Blog,BLOGS } from ‘./blog‘;

@Injectable()
export class BlogService {
  getBlogs(): Blog[] {
    return BLOGS;
  }
  getSelectedBlog(id:number):Blog
  {
     return this.getBlogs().find(x=>x.id==id);
  }
}

  正如前面所说,我们使用@Injectable()来装饰了我们的BlogService,使得我们可以在其他组件中注入这个服务,看AppComponent,我们发现和之前有一点儿改变

  

import { Component } from ‘@angular/core‘;
import {BLOGS,Blog} from ‘../data/blog‘;
import {BlogService} from ‘./../data/blog.service‘;

@Component({
    selector: ‘ngarticle‘,
    templateUrl: ‘./article.component.html‘,
    styleUrls:[‘./article.component.css‘]
})

export class ArticleComponent  {
    blogList:Blog[];
    selectedBlog:Blog;
    constructor(private bService:BlogService)
    {
        this.blogList=bService.getBlogs();
    }
    selectBlog(id:number)
    {
        this.selectedBlog=this.bService.getSelectedBlog(id);
    }
}

  我们在AppComponent的构造函数中使用了BlogService的参数,使得我们可以在其类的内部任意使用我们的服务(其实你并不用刻意关心依赖注入怎么工作的,你需要了解的是它给编程带来解耦的作用)

  而当我们兴致勃勃地用ng serve 运行的时候,我们却发现,怎么报错了?

  

  我们看到Angular2给我们的提示是BlogService没有Provider;

  我们需要在AppComponent组件的@Component()装饰器中添加这样一句话

  providers:[BlogService]

  provider的作用,就是告诉Angular,我们在初始化AppComponent的时候,同时也要创建一个BlogService的实例,这样,我们就可以在组件中使用了

  

  好了,到这里,我们只需要在AppComponnet.html把获取detail的函数的参数改了就行了

  

<div class="article">
    <ul class="articleList">
            <li *ngFor="let blog of blogList" (click)="selectBlog(blog.id)">
                <a>
                   {{blog.id}}:{{blog.title}}
                </a>
            </li>
    </ul>
    <div>
    <article-detail  [blog]="selectedBlog"></article-detail>

    </div>
</div>

运行效果嘛,其实和上篇代码的还是一样,但是还是贴下吧

  接下来我们将要继续学习如何使用Angular中的路由和Angualr中的HTTP请求;而在HTTP请求一章,我们将展开js中基于Promise的异步编程和Observable(可观察对象)的学习,途中,我们也会讲解如何在Angular2中使用Jquery!

  我好像很不会瞎比比,就这样吧

  更新ing。。。

  



  项目已经放到了gitbub上,地址 https://github.com/SeeSharply/LearnAngular

  本文章的提交 https://github.com/SeeSharply/LearnAngular/tree/df1cd319b3571622242ae4d1b424a5d9e853ed93

时间: 2024-08-04 06:13:19

Angular2入门系列教程-服务的相关文章

Provisioning Services 7.8 入门系列教程之十二 实现高可用性

续Provisioning Services 7.8 入门系列教程之十一 通过版本控制自动更新虚拟磁盘 在实际生产环境,保障系统的稳定运行,防止故障出现时系统瘫痪,因此故障转移.高可性尤为重要. 从PVS的部署中涉及的组件来看,要实现可用性需要从以下几个方面 1.活动目录DC 2.DHCP服务器 3.数据库SQL 4.网络 5.PVS服务器(TFTP服务器) 6.存储 对于活动目录.DHCP以及数据库服务器,可以通过故障转移群集来实现 Windows Server 2008 R2 之二十九故障转

Provisioning Services 7.8 入门系列教程之三 安装并配置 Provisioning Services

续Provisioning Services 7.8 入门系列教程之二 基础环境安装续 Provisioning Services 解决方案 Provisioning Services 流技术推送技术允许从单个共享磁盘映像实时地置备或重新置备计算机. 在这一过程中,管理员完全无需管理和修补各个系统, 所有映像管理均在主映像上完成. 每个系统的本地硬盘可以用来实现运行时数据缓存,在某些情况下,还可以完全从系统中移除,从而降低电力消耗.系统故障率和安全风险.Provisioning Services

Provisioning Services 7.8 入门系列教程之二 基础环境安装

续Provisioning Services 7.8 入门系列教程之一 部署学习环境介绍 一.建立Windows Server 2012 R2虚拟机母盘. 1.在Hyper-V首先建立一台虚拟机,安装Windows Server 2012 R2,并进行相关设置后,关闭计算机. 2.设置上面所建立的虚拟机的虚拟磁盘的文件属性为"只读",作为以后建立相同操作系统虚拟机的母盘. 二.基础环境安装 计算机名:DDC(取这个名称是为了满足Citrix许可服务器安装的需要,因为笔者从CitRix网

Android视频录制从不入门到入门系列教程(三)————视频方向

运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子的: 就是说,即使你是竖着拿手机的,Camera提供给你的视频图像的方向还是上图那样横着的图片. 我们可以通过下述方向改变Camera提供的视频图像的方法: camera.setDisplayOrientation(90); 让图像顺时针旋转90度,视频图像的方向就正常的. 本篇文章DEMO下载.

Provisioning Services 7.8 入门系列教程之八 自动添加设备

续Provisioning Services 7.8 入门系列教程之七 批量导入设备 对于批量导入设备,其最大的缺点是在导入前,必须准确记录所有设备的MAC地址.当然,这种方式也有许多方便之处,如可以将不同的设备添加到不同地站点.不同的集合. 下面介绍第三种方式:通过自动添加向导完成设备的添加 使用自动添加向导 自动添加向导可以自动配置各种规则,以便利用自动添加功能将新的目标设备自动添加到 Provisioning Services 数据库中. 可以在场.站点.集合或设备级别启动自动添加向导.

Provisioning Services 7.8 入门系列教程之十 通过类自动更新虚拟磁盘

续Provisioning Services 7.8 入门系列教程之九 手动更新虚拟磁盘 本文中介绍的自动更新虚拟磁盘这种更新方法,和前面介绍的手动更新虚拟磁盘的方法一样,也需要通过复制虚拟磁盘副本产生更新后的虚拟磁盘. 本文将重点介绍更新磁盘产生后,如何应用到设备. 在实际生产环境中,有些用户的PVS应用环境可以规模很大,有很多站点,每个站点下有很多设备集合.同时,很难有一时刻所有的计算机都关机,这样给应用更新磁盘代来了很大难度. 再者,管理员在实际更新中,可能会这样的一种需要,对某一些设备需

Provisioning Services 7.8 入门系列教程之九 手动更新虚拟磁盘

续Provisioning Services 7.8 入门系列教程之八 自动添加设备 在实际在生产环境中,用户总会要对操作系统.应用软件以及驱动程序进行升级.在PVS中,升级实质是对设备所使用的虚拟磁盘进行更新. PVS 7.8提供了两大类更新方式,一是手动更新,一是自动更新.相比自动更新,手动更新最大不便之处在于只能关机更新,无法完成开机状态下的设备.下面将介绍手动更新虚拟磁盘. 在更新虚拟磁盘之前,用户必须了解虚拟磁盘所在位置,模式以及该如何保证更新能顺利完成. 1.查看虚拟磁盘属性:(文件

Provisioning Services 7.8 入门系列教程14篇全部完成了.....

经过近期一段时间的努力,Provisioning Services 7.8 入门系列教程14篇全部完成了-- Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器 2016-05-14 Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)2016-05-13 Provisioning Services 7.8 入门系列教程之十二 实现高可用性 2016-05-

Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器

 续Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM) UEFI,全称Unified Extensible Firmware Interface,即"统一的可扩展固件接口",是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替BIOS(基本输入/输出系统).此标准由UEFI联盟中的140多个技术公司共同创建,其中包括微软公司.UEFI旨在提高软件互操作性和解决BIOS的局限性. 相比传统