环境
前端:angular6
后端:thinkphp5
使用场景
1.服务service 获取后端接口数据
2.组件componment 引用服务处理,并展示数据到前台
3.前台*ngFor 遍历出数据
实例:
一、nav.service.ts 菜单数据从接口获取
①import HttpClient 、Observable、Injectable、OnInit、Nav(定义数组格式)
②Injectable注入 使用cli命令 ng g service 服务名 创建自动搞定
③HttpClient 初始化
constructor(private http: HttpClient ) { }
④定义函数接收数据 ,使用Observable
1)首先定义一个API接口地址
private _navApiUrl = 'apidata/api/Nav/index'; 这里 /apidata 进行了URL重写
2)然后定义一个接收后端数据的函数 getnavdata() 使用http.get返回的是Obervable对象
使用Observable<Nav[]> 在组件里获得结果就要使用subscribe解析出来
getnavdata(): Observable<Nav[]> {
return this.http.get<Nav[]>(this._navApiUrl);
}
这里就三点注意
1.函数后面冒号(:)紧跟Obsevable<xxx> 同样的http.get<xxx>也要使用
2.结束使用return返回数据 此时返回的是Observable对象的数据
3.注意使用空格 容易造成格式错误比如:冒号后空格 ,还有大括号前空格
这里的Nav[] 就是单独定义的数组结构
nav.ts
export class Nav {
id: number;
name: string;
}
3)
实例nav.service.ts

import {Injectable, OnInit} from '@angular/core';
import { HttpClient} from '@angular/common/http';
import { Observable } from 'rxjs/index';
import { Nav } from './nav';
@Injectable({
providedIn: 'root'
})
export class NavService implements OnInit {
constructor(private http: HttpClient ) { }
private _navApiUrl = 'apidata/api/Nav/index';
getnavdata(): Observable<Nav[]> {
return this.http.get<Nav[]>(this._navApiUrl);
}
ngOnInit() {
}
}
参考服务建立命令
D:\cmf\angular6\project1>ng g s service\formadd

二、组件
1.导入服务nav.service
2.注入服务 constructor(public navservice: NavService) { }

import { Component, OnInit } from '@angular/core';
import { NavService } from '../nav.service';
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
styleUrls: ['./nav.component.css'],
})
export class NavComponent implements OnInit {
public nav: any;
constructor(public navservice: NavService) { }
getnavdata(): void {
this.navservice.getnavdata().subscribe(
data => {
this.nav = data;
console.log(data);
}
);
console.log('component:');
console.log(this.navservice.getnavdata());
return this.nav;
}
ngOnInit() {
this.getnavdata();
}
3.视图跟新
nav.component.html

<ul class="row">
<li ngbDropdown *ngFor="let navs of nav" class="col-lg-2">
<a href="{{ navs.href}}}" id="dropdownBasic2" ngbDropdownToggle>{{ navs.name }}</a>
<div ngbDropdownMenu aria-labelledby="dropdownBasic2">
<button class="dropdown-item">Action - 1</button>
<button class="dropdown-item">Another Action</button>
<button class="dropdown-item">Something else is here</button>
</div>
</li>
</ul>
