zoukankan      html  css  js  c++  java
  • Angular2快速入门-4.创建一个服务(创建NewsService提供数据)

    上篇我们使用的数据是通过mock-news.ts中的const News[] 数组直接赋给Component 组件的,这篇我们把提供数据的部分单独封装成服务

    第一、创建news.service.ts

    import { Injectable } from "@angular/core";
    import { News } from './news';
    import { NewList } from './mock-news';
    
    @Injectable()
    export class NewsService {
        getNews() {
            return Promise.resolve(NewList) ;
        }
    }
    

     装饰器@Injectable()代表该服务会在程序启动时候自动注入Component的组件中,后面会讲解怎么注入。

       我们在类NewsService中增加了一个方法 getNews方法,该方法返回一个Promise 承诺,它是一种异步技术,防止页面请求的时候线程阻塞,你可以把它理解成,当有数据的时候,会自动推送给你,

    第二、修改newslist.component

    import { Component, OnInit } from '@angular/core';
    import { News } from './news';
    import { NewList } from './mock-news';
    import { NewsService } from './news.service';
    
    @Component({
        selector:'news',
        templateUrl:'./newslist.component.html',
        styleUrls:['./newslist.component.css'],
        providers: [NewsService]
    })
    
    export class NewsListComponent implements OnInit {
      
        newlist:News[];
        selectedNew:News;
        onSelected(n:News):void{
            this.selectedNew=n;         
        }
    
        constructor(private newsService:NewsService){};
        getNews():void{
           this.newsService.getNews().then(newlist=>this.newlist=newlist); 
        }
    
        ngOnInit():void{
            this.getNews();
        }
    }
    

    在该类中我们做了三处修改

    1. 导入服务NewsService,通常服务都是.service.ts后缀,约定。

    2. 在providers中增加 NewsService,

    3. 集成 OnInit ,增加Angular2的初始化ngOnInit,主要目的是重新设置自己的属性newlist

    4.注意构造函数constructor,服务在这里DI进来。

    第三、总结

    命令行 npm start,程序可以work了,

    我们需要注意的几个点,

    1. 服务写好后,需要在Component中 导入到 Providers

    2. 集成OnInit的时候注意 import { OnInit } from '@angular/core';

    3. 注意Promise的写法,只有返回时Promise的对象的时候,才可以使用then 后续处理

    4. 了解箭头函数的使用

    最终程序下载  点击下载

  • 相关阅读:
    DES CBC java加密 php解密
    CocosCreator入门(一) ------ 简介、安装、微信小游戏
    H5游戏开发----CocosCreator、CocosCreator3D、Cocos2dX差异与选择
    GIT:git -c diff.mnemonicprefix=false -c core.quotepath=false revert --no-edit
    xxx was built without full bitcode" 编译错误解决
    程序猿之GitHub
    【北医三院】生孩、出院等事宜
    Unity:Andriod部分手机频繁闪退,vivo y55a等,Skipped 62 frames! The application may be doing too much work on its main thread
    初识LUA
    Unity3D开发之Matrix4x4矩阵变换
  • 原文地址:https://www.cnblogs.com/clc2008/p/7884151.html
Copyright © 2011-2022 走看看