创建新项目:
ng new angularproject 创建依赖: npm install 安装组件: ng g component components/home ng g component components/pcontent
在app-routing.module.ts里面配置路由
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './components/home/home.component';
import { PcontentComponent } from './components/pcontent/pcontent.component';
const routes: Routes = [
{path:'home',component: HomeComponent},
{path:'pcontent',component: PcontentComponent},
{path:'**',redirectTo: 'home'},
];
分被配置CSS
配置静态图片文件
开发过程中先写静态界面




静态页面实现后,需要和服务器进行连接请求数据,再前端进行展示
api接口
列表:http://a.itying.com/api/productlist
列表的详情:http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955
在app.module.ts中
Angular5.x 以后 get、post 和和服务器交互使用的是 HttpClientModule 模块。

定义服务,把公共需要引入的放在服务里面
ng g service services/common
在app.module.ts中引入服务
import { CommonService } from './services/common.service';
在providers中声明

在服务.ts中
定义需要引入的公共的api
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CommonService {
public domain:string='http://a.itying.com/';
constructor(public http:HttpClient) { }
//服务中定义一个get函数
get(api:string){
return new Promise((resolve,reject)=>{
this.http.get(this.domain+api).subscribe((response)=>{
resolve(response);
})
})
}
}
在其他组件中若想引用服务,例如home组件引入
home.component.ts
引入服务
import { CommonService } from '../../services/common.service';
声明服务/实例化服务
constructor(public common:CommonService){}
引入api
ngOnInit(): void { var api = '/api/productlist'; this.common.get(api).then((response)=>{ console.log(response); }) }
home.component.ts
拿到数据后,把数据渲染到页面上
public list:any[]=[]

在home.component.ts自定义数据和获取服务中数据
import { Component, OnInit } from '@angular/core';
import { CommonService } from '../../services/common.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
public list:any[]=[];
public domain:string="";
constructor(public common:CommonService) {
//拿到服务器中的domain
this.domain=this.common.domain;
}
ngOnInit(): void {
var api = 'api/productlist';
this.common.get(api).then((response:any)=>{
console.log(response);
//拿到请求数据
this.list=response.result;
})
}
}
在home.html中渲染
<div class="item" *ngFor="let item of list"> <h3 class="item_cate">{{item.title}}</h3> <ul class="item_list"> <li *ngFor="let food of item.list"> <div class="inner"> <!-- <img src="assets/images/1.jpg" /> --> <img [src] = "domain+food.img_url" /> <p class="title">{{food.title}}</p> <p class="price">¥{{food.price}}</p> </div> </li> </ul> </div>
二、点击单个菜跳转到菜的详情页面
获取菜的id
详情:http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955
动态路由或者get传值
(1)选择动态路由传值
在app-routing.module.ts中定义

在home.html中进行跳转
<a [routerLink]="[ '/pcontent', food._id ]"> <img [src] = "domain+food.img_url" /> <p class="title">{{food.title}}</p> <p class="price">¥{{food.price}}</p> </a>
在菜品详情页获取动态路由传来的值,pcontent.ts
获取路由动态传来的food._id
import { ActivatedRoute } from '@angular/router';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CommonService {
public domain:string='http://a.itying.com/';
constructor(public http:HttpClient) { }
get(api:string){
return new Promise((resolve,reject)=>{
this.http.get(this.domain+api).subscribe((response)=>{
resolve(response);
})
})
}
}
在pcontent.ts引入公共的服务,
import { CommonService } from '../../services/common.service';
//请求数据http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955
获取完整URL请求数据,获取数据后在前端渲染,
注意打印值进行验证:
如果获取的是字典模式,定义时也得是字典模式
public list:any={};
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { CommonService } from '../../services/common.service';
@Component({
selector: 'app-pcontent',
templateUrl: './pcontent.component.html',
styleUrls: ['./pcontent.component.css']
})
export class PcontentComponent implements OnInit {
public list:any={};
public domain:string="";
constructor(public route:ActivatedRoute,public common:CommonService) {
//拿到服务中的domain
this.domain=this.common.domain;
}
ngOnInit(): void {
this.route.params.subscribe((value:any)=>{
// value是字典:{id: "5ac1a22011f48140d0002955"}
// console.log(value)
this.requestContent(value.id)
})
}
requestContent(id){
//请求数据http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955
var api = 'api/productcontent?id='+id
this.common.get(api).then((response:any)=>{
console.log('详情')
console.log(response)
//把获取的值拿到 pcontent.html中渲染就可以,把拿到的数据复制给list
this.list=response.result[0];
console.log(this.list)
// console.log(this.list)
})
}
}
悟已往之不谏,知来者之可追。

浙公网安备 33010602011771号