Angular4+NodeJs+MySQL 入门-05 接口调用
来源:互联网 发布:使命召唤11优化怎么样 编辑:程序博客网 时间:2024/06/05 12:01
接口调用
今天讲一下,如果在前端页面上通过调用后台接口,返回来的数据。把前面的几章结合起来。
这里所有用的代码在 https://github.com/xiaotuni/angular-map-http2。
简单介绍一下 https://github.com/xiaotuni/angular-map-http2 这个项目吧
分前端用的是Angular4写的: 前端分两部分一部分是WebApp移动端,一部分是接口管理可以算是PC端;
后台管理接口部分用得是NodeJs写的:主要核心功能就是规则解析,所有每一个接口的规则信息都保存到sys_rule这张表的content里了,里面以是JSON格式存放的规则信息。前端要添加什么接口,PC端添加接口规则就可以了,然后前端就可以进行调用了。目前简单的增、删、改、查及条件判断基本上没有什么问题。接口管理界面大概就是这个样子,界面很丑,哈哈~
好了现在开始正式来调用了。以用户登录来讲吧,
首先是画一个登录界面
html ->login.html内容
<xtn-navbar [(Title)]="__Title"></xtn-navbar><div class="loginCss"> <div class="top"></div> <div class="ctrl"> <div class="username"> <input type="text" placeholder="Enter username" required [(ngModel)]="UserInfo.username"> </div> <div class="password"> <input type="password" placeholder="Enter password" required [(ngModel)]="UserInfo.password"> </div> </div> <div class="operator"> <div class="btn" (click)="submit()"> <div class="login"> login </div> </div> <div class="btn"> <div class="forget" (click)="forgetPassword()"> forget </div> </div> </div></div>
Css –>login.scss 内容
.loginCss { padding: 10px; .ctrl { margin-top: 20vh; position: relative; .username { position: relative; display: flex; input { border: 1px solid #f5f5f5; padding: 5px 10px; border-radius: 5px; flex: 1; font-size: 1rem; } } .password { @extend .username; margin-top: 2rem; } } .operator { display: flex; padding: 2rem; .btn { margin: 5px; flex: 1; text-align: center; padding: 5px 10px; > div { padding: 5px 10px; border: 1px solid #999; &:hover { border: 1px solid blue; } } } }}
最后就是typescript了–>login.ts内容
import { Component, OnInit, Output, Input } from '@angular/core';import { Utility, ServiceHelper, routeAnimation, BaseComponent } from '../Core';import * as CryptoJS from 'crypto-js';@Component({ selector: 'xtn-manage-login', templateUrl: './login.html', styleUrls: ['./login.scss'], animations: [routeAnimation], // 页面切换动画 providers: [ServiceHelper] // 注入一个service})export class Login extends BaseComponent implements OnInit { public UserInfo: any; /** * Creates an instance of Login. * @param {ServiceHelper} sHelper service用于接口调用等 * @memberof Login */ constructor(private sHelper: ServiceHelper) { super(); this.UserInfo = { username: 'admin', password: 'admin@163.com' }; } ngOnInit() { } /** * 点击登录按钮 * * @memberof Login */ submit() { const data = Object.assign({}, this.UserInfo); data.password = CryptoJS.MD5(data.password).toString(); this.sHelper.UserInfo.Login(data).then(() => { const { Params } = Utility.$GetContent(Utility.$ConstItem.UrlPathInfo) || { Params: {} }; const { IsGoBack } = Params || { IsGoBack: 0 }; if (!!Number(IsGoBack)) { Utility.$GoBack(); } else { Utility.$ToPage(Utility.$ConstItem.UrlItem.ManagerDashboard, {}); } }, () => { }); } forgetPassword() { console.log('forgetPassword'); }}
- Utility–>常用的一些方法都在这里,
- ServiceHelper–>所有Service都在这里可以找到,
- routeAnimation,–>WebApp在路由切换页面过滤效果
- BaseComponent –> 主要是实现路由切换的时候,要实现一个钩子动作,所以添加了这个,其它页面只要继承它就可以了,就不用每个界面都去实现钩子动作了。
ServiceHelper 里的代码
这个里面的代码其实很简单的,就是一个入口,有的时候一个组件要引用好多service,在构造函数里要好多 constructor(private service1: Service1,…) {}。我就把这些都放到一个里去。里面的代码如:
import { Injectable } from '@angular/core';import { Client } from './Core';import { ApiManagerService } from './ApiManager';import { UserInfoService } from './UserInfo';@Injectable()export class ServiceHelper { public ApiManager: ApiManagerService; public UserInfo: UserInfoService; constructor() { this.ApiManager = new ApiManagerService(Client); this.UserInfo = new UserInfoService(Client); }}
由于是用户登录,所以用到了UserInfoService这个类。
UserInfoService.ts,用户登录,注册,用户详情等接口调用及数据处理类
import { Utility } from './Core';export class UserInfoService { public UserInfo: any; public Users: any[]; constructor(private Client) { } /** * 用户登录 * * @param {*} obj * @returns {Promise<any>} * @memberof UserInfoService */ Login(obj: any): Promise<any> { const __List = { actions: { list: [], loading: 'Load', fail: 'Fail', complete: 'Complete' } }; __List.actions.list.push({ StateName: 'StateName', Condition: obj, promise: (client) => client.post(client.API.UserInfo.Login, { data: obj }), }); const __self = this; return this.Client(__List).then((result) => { __self.UserInfo = result && result[0] ? result[0] : []; // 将token保存下来。 Utility.$SetContent(Utility.$ConstItem.UserInfo, __self.UserInfo, true); return result; }); }}
接口调用的地址在哪里呢?是: (client) => client.post(client.API.UserInfo.Login, { data: obj }),而这个又在哪里西的呢,在ApiClient.ts文件里。之前的篇幅说到了,怎么配置。点击登录时,错误密码时出错。
后台接口配置下一篇再说了,只需要添加一条规则文件记录就可以了。
- Angular4+NodeJs+MySQL 入门-05 接口调用
- Angular4+NodeJs+MySQL 入门-04 接口调用类
- Angular4+NodeJs+MySQL 入门-06 接口配置
- Angular4+NodeJs+MySQL 入门-03 后台接口定义
- Angular4+NodeJs+MySQL 入门-01
- Angular4+NodeJs+MySQL 入门-02 MySql操作类
- nodejs+mysql入门实例
- Angular4 & MVC方法调用
- Angular4简单入门笔记
- angular4入门笔记
- ES6+angular4+mysql杂记
- nodejs、angular4、Ionic,window开发环境安装
- nodejs同步调用获取mysql数据大坑
- Angular4中调用js代码
- Angular4中调用js代码
- Angular4中调用js代码
- 十分钟入门 Angular4(一)
- CXF 入门: 远程接口调用
- IDEA配置SVN(一)
- 关于写java web项目一些问题
- 2017 Summer Training Day1
- rocketmq问题汇总-如何将特定消息发送至特定queue,消费者从特定queue消费
- poj 2752 (summerIII seek the name,seek the fame)
- Angular4+NodeJs+MySQL 入门-05 接口调用
- 1007. 素数对猜想 (20)
- activemq 消息选择器Selector
- HDFS是什么?HDFS适合做什么?我们应该怎样操作HDFS系统?
- 【自学PHP】第二课:PHP数据类型
- flask笔记
- 字符串处理(4)——字符串常用操作(字符串链接,比较,截取,查找,大小转换,内容替换,获取某位置的字符)
- Web前端 PS切图
- tow weeks 拆解vim(5)