场景

Ionic介绍以及搭建环境、新建和运行项目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166

在上面搭建起来项目的基础上,实现请求后台服务端数据并加载显示。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

项目根模块app.module.ts中引入模块

打开app.module.ts

import {HttpClient, HttpClientModule} from '@angular/common/http';

并添加声明

  imports: [BrowserModule,
     IonicModule.forRoot(),
      AppRoutingModule,
      HttpClientModule

    })
    ],

 

 

在需要使用的组件中引入

比如这里要在tab2这个组件中使用HttpClient请求数据,那么在tab2.page.ts中引入

import { HttpClient } from '@angular/common/http';

并声明

constructor(private http: HttpClient) {}

 

 

实现页面初始化后加载数据

为了实现当前tab2页面加载完成后就请求数据,所以在tab2.page.ts中添加生命周期方法

  ngOnInit() {
    //清空请求结果的list
    this.resultList = [];
    //get请求数据
    this.loadData();
  }

当前页面加载完成后就会执行ngOnInit里面的代码,首先会将存储结果的list清空,然后执行请求数据的方法。

此块的完整示例代码

  

resultList: any;   // 保存结果数据的数组

  constructor(private http: HttpClient) {}

  ngOnInit() {
    //清空请求结果的list
    this.resultList = [];
    //get请求数据
    this.loadData();
  }

 

然后在加载数据的方法loaData中

 

 public loadData() {
    this.getResult().then((res: any) => {
        console.log(res);
        // 把结果数据压入结果数组列表中。
        res.forEach((element: never) => {
          this.resultList.push(element);
        });
     
    }).catch(err => {
      console.error(err);
    });
  }

 

将getResult方法的返回结果存储到当前页面的resultList中,那么方法getResult方法就是具体请求数据的方法

  public getResult() {
    const url = "http://localhost:3000/news";
    const method = 'GET';
    const options = { params: { 'badao': '霸道的程序猿'} };
    return this.http.request(method, url, options).toPromise();
  }

 

url:请求数据的后台服务端地址

method:标识是GET请求还是POST请求

options:设置请求参数等,这里传递了一个badao参数

前端搭建完成。

运行项目

ionic serve

打开浏览器输入:

http://localhost:8100

然后点击下面导航栏的tab2

搭建Expres后台服务端程序

前面前端请求后台的url是http://localhost:3000/news

请求结果是返回一个数组。

新建一个文件夹nodeServe,然后在此文件夹下新建app.js和package.json两个文件

package.json

{
  "dependencies": {
    "ejs": "^2.5.6",
    "express": "^4.15.3",
    "socket.io": "^2.0.3",
    "body-parser": "~1.17.1"
  }
}

 

app.js

 

 

var express = require('express');

var app= express();

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

/*express允许跨域*/

app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1')
    if(req.method=="OPTIONS") res.send(200);
    else  next();
});

 


//app.use(express.static(path.join(__dirname, 'public')));

app.get('/',function(req,res){

 res.send('首页');

})

app.post('/dologin',function(req,res){

 console.log(req.body);

  res.json({"msg":'post成功'});

 

})

app.get('/news',function(req,res){

 //console.log(req.body);
 //res.jsonp({"msg":'这是新闻数据'});
 console.log("接收到的参数为:"+req.query.badao);
 res.send(["公众号:霸道的程序猿","关注推送编程教程","欢迎关注"])

})

 


app.listen(3000,'127.0.0.1');

 

运行后台服务端

在上面的nodeServe文件夹下打开命令行,确保电脑上已经安装node

安装依赖

npm install

或者

cnpm install

运行服务端程序

node app.js

然后打开浏览器输入:

http://localhost:3000

如果出现以下页面则是运行成功

 

 

 

然后输入上面请求的地址查看返回的数据

 

 

 

重新运行前端ionic项目然后点击tab2,查看服务端的控制台,已经接受到传递的参数。

 

 

 

然后在前端loadData中打断点查看获取的数据

 

 

此时打开tab2.page.html将获取的后端数据显示

<ion-content [fullscreen]="true">
  <ul>
    <li *ngFor="let item of resultList">{{item}}</li>
  </ul>
</ion-content>

效果

 

 

 

示例代码下载

代码见下面文章末尾

https://mp.weixin.qq.com/s/Od7GWw25GUf4piQxvW3nWg

posted on 2020-06-03 10:48  霸道流氓  阅读(610)  评论(0编辑  收藏  举报