• service服务


    service服务用于获取网络数据;

    #应用场景:

    获取到后台的数据,并展示在web页面上。数据来源:https://jsonplaceholder.typicode.com/photos
    #实现思路:

    1.构建Angular工程
    2.引入(import)HttpClientModule
      在app.module.ts文件中完成
        
        import { HttpClientModule } from "@angular/common/http";
        
     
    还要在 app.component.ts 中引入 httpClient (这是一个service)
      
        import {HttpClient } from "@angular/common/http";

    3.通过oberverable(可观察对象),获取到server的数据
        
      constructor(private http:HttpCLien){}//注入一个service(HttpClient)

      ngOnInit(): void {
        //网络请求
        // //返回一个可观察对象(observable)
        this.http.get("https://jsonplaceholder.typicode.com/photos")
        
    4.通过订阅(subscribe)这个observable,给component提供数据
        
      //订阅(observable)可观察的对象
       .subscribe(data=>{
         this.products=data;
           console.log(data);
            });
    5.在组件的html,显示后台的数据,以card样式展示出来。
        
    <div class="container">

    <div class="row">
    <div class="card" style=" 18rem;" *ngFor="let product of products">
    <img src="{{product.url}}" class="card-img-top" alt="商品名称">
    <div class="card-body">
    <h5 class="card-title">{{ product.title }}</h5>
    <p class="text-muted">{{ product.title }}</p>
    <a href="#" class="btn btn-primary">添加到购物车</a>
    </div>

    </div>
     
    </div>
    </div>
        ps:每一个product的数据结构:
    {
    "albumId": 1,
    "id": 2,
    "title": "reprehenderit est deserunt velit ipsam",
    "url": "https://via.placeholder.com/600/771796",
    "thumbnailUrl": "https://via.placeholder.com/150/771796"
    },
     
    },
    6.优化:创建一个service,通过service注入,获取到后台数据。
    7.service给组件提供数据。

    #知识点:

    app.component.ts文件中,看到:
    class AppComponent implements OnInit //这里的implements 是一个关键字,“实现”,具体来说,它“实现”一个接口 (interface)。
    为什么要实现一个接口呢?
    因为interface只是定义了一个格式(规则),还没有实现,所以要实现它。
    参考:Oninit的接口定义,如下:
    export interface OnInit{}
     
    #创建服务 (service)
    $ng g service xx(product)

    Injectable: 可注入的

    @Injectable({
    providedIn: 'root' //meta data 元数据
    })

    依赖注入(DI:dependency Injection):
    依赖:当一个东西运行时,需要依赖另外一个“东西”
    注入:把所依赖的“东西”拿过来
    Inject:注入、注射

    一个service 可以比喻为一个药方,药方的提供者(provide)
    护士拿着药方,来完成注射(inject)

    root:把整个service放到一个dependency injection system (DI系统),而且对所有组件都是可用的(可见的)
     
    #创建service 实现思路
    1. 创建一个service
    2. 在所创建的service里面调用httpClient(本身就是一个service)

    3. service都有一个返回,返回一个:observable(可观察对象),是一个对象

    Constructor中不能放带有业务逻辑的实例对象

    #引入我们自己创建的service方法
    1. import 所需要的service(特别注意路径)
    product.service这是文件名
    所要import的是:类(ProductService)。

    不在component里面调用://import {HttpClient } from "@angular/common/http";
    在自己的service中调用了HttpClient

    2. 调用service方法
    #疑问:用了service有什么好?
    service提供的是一种服务,为component提供的。
    通常是为多个component提供服务

    service提供的,通常是:增删改查
    service作用:承上启下,具体:
    1. 获取server的数据,把数据传给component
    2. 它获取component上用户输入的数据,并把数据传给server

    #进一步学习
    1. 我们用到的是一个module,多个module怎么办?
    2. 与安全相关的,比如路由保护

    附:
    app.module.ts

    app.component.ts

    home.component.ts

  • 相关阅读:
    java忽略安全警告注解@SuppressWarnings
    spring data jpa 报for input String "id"错误解决
    spring Data Jpa 报错 failed to lazily initialize a collection of role: com.itheim.pojo.Role.users, could not initialize proxy
    记一次Content type 'application/json;charset=UTF-8' not supported解决方案
    包冲突异常 loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFacto
    Java运算符(&)、(|)、(^)、(~)
    Java中的原码、补码、反码
    vim编辑器
    Linux yum、tar、rpm、zip、gzip命令的使用
    error Couldn't find a package.json file in
  • 原文地址:https://www.cnblogs.com/aiyamoer/p/10874659.html
Copyright © 2020-2023  润新知