黑马程序员技术交流社区

标题: 【广州前端首发】Angular5语法核心课程(四) [打印本页]

作者: AreYouGlad    时间: 2018-1-12 19:11
标题: 【广州前端首发】Angular5语法核心课程(四)
本帖最后由 AreYouGlad 于 2018-1-12 19:11 编辑

查看更多精彩前端资源


服务
什么是服务使用服务的好处文件组织创建服务
创建文件编码实现
[JavaScript] 纯文本查看 复制代码
import { Injectable } from '@angular/core';

@Injectable()
export class StorageService {

        // 封装setItem
  set(key: string, data: any): void {
          // 先尝试把val序列化为字符串
          // 如果成功了就存储成功的值, 否则原物存储
    try {
      data = JSON.stringify(data);
    }finally {
      localStorage.setItem(key, data);
    }
  }

        // 封装getItem
  get(key: string): any {
          // 先从本地取出字符串值, 然后尝试解析为js对象
          // 如果成功了就返回成功的值, 否则原物返回
    let data = localStorage.getItem(key);
    try {
      data = JSON.parse(data);
    }finally {
      return data;
    }
  }

        // 封装removeItem
  remove(key: string): void {
    localStorage.removeItem(key);
  }

        // 封装clear
  clear(key: string): void {
    localStorage.clear();
  }
}

注册服务
[JavaScript] 纯文本查看 复制代码
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

// 导入服务, 注意导入的名称别写错
import { StorageService } from './service/storage.service';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [
    StorageService   // 服务在这里进行配置
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

使用服务
[JavaScript] 纯文本查看 复制代码
import { Component } from '@angular/core';
import { StorageService } from './service/storage.service';  // 导入服务

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

        // 给实例添加storage属性, 类型为StorageService,
        // 然后Angular会自动帮我们创建StorageService实例并赋值给storage属性
        constructor(public storage: StorageService) {
                console.log(this.storage);      // 打印的是实例
                this.storage.set('test', 123);    // 使用测试
        }
}

依赖注入
依赖注入好处使用不用管依赖注入吗HTTP
配置
[JavaScript] 纯文本查看 复制代码
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [
    HttpClientModule
  ]
})
export class AppModule { }

使用范例
[JavaScript] 纯文本查看 复制代码
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';  // 导入HttpClient类

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
        // 定义http属性, Angular会自动创建HttpClient实例
        constructor(private http: HttpClient) {
                  console.log(this.http);  // 打印测试一下
          }
}

get请求
[JavaScript] 纯文本查看 复制代码
import { HttpClient } from '@angular/common/http';

export class AppComponent {
        constructor(private http: HttpClient) {

                // 调用get方法发送请求, 然后调用toPromise方法转成Promise实例
            // 接下来就按照Promise的API添加成功或失败处理函数
            this.http.get('http://vue.studyit.io/api/getprodlist').toPromise()
            .then(
              (data) => console.log(data),
              (err) => console.log(err)
            );

            // 或者直接调用subscribe方法
            this.http.get('http://vue.studyit.io/api/getprodlist')
            .subscribe(
              (data) => console.log(data),
              (err) => console.log(err)
            );

          }
}

post请求
[JavaScript] 纯文本查看 复制代码
import { HttpClient, HttpHeaders } from '@angular/common/http';

export class AppComponent {
        constructor(private http: HttpClient) {

                // post请求, 发送json格式数据
            // 注意!: 我们演示的这个接口不支持json数据格式, 所以会添加失败, 大家把这个请求方式记下来以备后患
            this.http.post('http://vue.studyit.io/api/addproduct', {name: '飞机'}).toPromise()
            .then(
              (data) => console.log(data),
              (err) => console.log(err)
            );

                // post请求, 发送formData格式数据
            // 我们的接口需要的就是formData数据格式, 所以这里可以添加成功
            // 注意!: 这里使用的HttpHeaders需要在上面引入后才能使用
            const postFormDataConfig = { headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'}) };
            this.http.post('http://vue.studyit.io/api/addproduct', 'name=火车', postFormDataConfig).toPromise()
            .then(
              (data) => console.log(data),
              (err) => console.log(err)
            );

          }
}


作者: AreYouGlad    时间: 2018-1-12 19:12





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2