学成在线--2.CMS前端页面查询开发

文章目录

    • 0.思路总结
    • 1.创建CMS模块的目录架构
    • 2.创建页面并配置路由
      • 1)在page目录新建page_list.vue,扩展名为.vue。
      • 2)在cms的router下配置路由。
      • 3)在base目录下的router导入cms模块的路由
    • 3.使用Table组件完善页面内容
    • 4.Api调用服务器端查询接口获取数据
      • 1)在cms模块的api目录定义cms.js。
      • 2)在前端页面page_list.vue中导入cms.js,获取后端返回的数据。
    • 5.解决调用接口的跨域问题
    • 6.实现指定页面的分页查询
      • 1)定义分页视图
      • 2)定义数据模型对象
      • 3)定义分页方法,接收页码参数
    • 7.使用钩子函数实现进入页面时立即查询

0.思路总结

在这里插入图片描述
1)在浏览器输入前端url
2)前端框架vue.js根据url解析路由,根据路由找到page_list.vue页面
3)首先执行page_list.vue中的钩子方法
4)在钩子方法中调用query方法
5)在query方法中调用cms.js中的page_list方法
6)cms.js中的page_list方法通过axios请求服务端接口
7)采用proxyTable解决跨域问题,node.js将请求转发到服务端(http://localhost:31001/cms/page/list)
8)服务端处理,将查询结果响应给前端
9)成功响应调用then方法,在then方法中处理响应结果,将查询结果res赋值给数据模型中的total和list变量。
10)vue.js通过双向数据绑定将list数据渲染输出。

1.创建CMS模块的目录架构

在module目录中创建cms模块的目录结构,如下所示:
在这里插入图片描述

2.创建页面并配置路由

1)在page目录新建page_list.vue,扩展名为.vue。

.vue文件的结构如下:

<template>
<!‐‐编写页面静态部分,即view部分‐‐>
测试页面显示...
</template>
<script>
/*编写页面静态部分,即model及vm部分。*/
</script>
<style>
/*编写页面样式,不是必须*/
</style>

注意:template内容必须有一个根元素,否则vue会报错,这里我们在template标签内定义一个div。

2)在cms的router下配置路由。

在router目录下新建index.js,路由代码如下:

import Home from '@/module/home/page/home.vue';
import page_list from '@/module/cms/page/page_list.vue';
export default [{
path: '/cms',
component: Home,
name: 'CMS内容管理',
hidden: false,
children:[
{path:'/cms/page/list',name:'页面列表',component: page_list,hidden:false}
]
}
]

3)在base目录下的router导入cms模块的路由

// // 导入路由规则
import HomeRouter from '@/module/home/router'
import CmsRouter from '@/module/cms/router'
// 合并路由规则
concat(HomeRouter)
concat(CmsRouter)

在这里插入图片描述

3.使用Table组件完善页面内容

本项目使用Element-UI来构建界面,Element是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
Element-UI官方站点:https://element.eleme.cn/#/zh-CN

本功能实现的页面列表,用户可以进行分页查询、输入查询条件查询,通过查看Element-UI库,我们需要Table 表格、Form表单 及Pagination 分页组件。

进入Element-UI官方,找到Table组件,拷贝源代码到page_list.vue页面中。

根据需求完善页面内容,完善列表字段,添加分页组件。

<template>
<div>
<el‐button type="primary" v‐on:click="query" size="small">查询</el‐button>
<el‐table
:data="list"
stripe
style="width: 100%">
<el‐table‐column type="index" width="60">
</el‐table‐column>
<el‐table‐column prop="pageName" label="页面名称" width="120">
</el‐table‐column>
<el‐table‐column prop="pageAliase" label="别名" width="120">
</el‐table‐column>
<el‐table‐column prop="pageType" label="页面类型" width="150">
</el‐table‐column>
<el‐table‐column prop="pageWebPath" label="访问路径" width="250">
</el‐table‐column>
<el‐table‐column prop="pagePhysicalPath" label="物理路径" width="250">
</el‐table‐column>
<el‐table‐column prop="pageCreateTime" label="创建时间" width="180" >
</el‐table‐column>
</el‐table>
<el‐pagination
layout="prev, pager, next"
:page‐size="this.params.size"
v‐on:current‐change="changePage"
:total="total" :current‐page="this.params.page" style="float:right;">
</el‐pagination>
</div>
</template>
<script>
export default {
data() {
return {
list:[],
total:50,
params:{
page:1,//页码
size:2//每页显示个数
}
}
},
methods:{
//分页查询
changePage:function () {
this.query()
},
//查询
query:function () {
alert("查询")
}
}
}
</script>

测试结果如下:
在这里插入图片描述

4.Api调用服务器端查询接口获取数据

1)在cms模块的api目录定义cms.js。

在cms.js中定义如下js方法,此方法实现http请求服务端页面查询接口。

//public是对axios的工具类封装,定义了http请求方法
import http from './../../../base/api/public'
export const page_list = (page,size,params) => {
return http.requestQuickGet('http://localhost:31001/cms/page/list/'+page+'/'+size)
}

axios实现了http方法的封装,vue.js官方不再继续维护vue-resource,推荐使用 axios。

2)在前端页面page_list.vue中导入cms.js,获取后端返回的数据。

调用cms.js中的page_list 方法,请求服务端页面查询接口,并返回数据,将数据封装到res中。

import * as cmsApi from '../api/cms'//查询
query:function () {
cmsApi.page_list(this.params.page,this.params.size,this.params).then((res)=>{
console.log(res)
this.total = res.queryResult.total
this.list = res.queryResult.list
})
}

在这里插入图片描述

5.解决调用接口的跨域问题

测试上边的代码 ,结果报错,如下 :

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
'http://localhost:11000' is therefore not allowed access.

原因:浏览器的同源策略不允许跨域访问,所谓同源策略是指协议、域名、端口相同。
解决:采用proxyTable解决。

proxyTable是什么?

vue-cli提供的解决vue开发环境下跨域问题的方法,proxyTable的底层使用了http-proxymiddleware(https://github.com/chimurai/http-proxy-middleware),它是http代理中间件,它依赖node.js,基本原理是用服务端代理解决浏览器跨域。
在这里插入图片描述具体的配置如下:
1)修改api方法中url的定义
请求前加/api前缀

//public是对axios的工具类封装,定义了http请求方法
import http from './../../../base/api/public'
let sysConfig = require('@/../config/sysConfig')
let apiUrl = sysConfig.xcApiUrlPre;
export const page_list = (page,size,params) => {
return http.requestQuickGet(apiUrl+'/cms/page/list/'+page+'/'+size)
}

2)在config/index.js下配置proxyTable。
以/api/cms开头的请求,代理请求http://localhost:31001

'/api/cms': {
target: 'http://localhost:31001',
pathRewrite: {
'^/api': ''//实际请求去掉/api
}

6.实现指定页面的分页查询

1)定义分页视图

使用v-on监听更改分页事件

<el‐pagination
layout="prev, pager, next"
:page‐size="this.params.size"
v‐on:current‐change="changePage"
:total="total" :current‐page="this.params.page" style="float:right;">
</el‐pagination>

2)定义数据模型对象

data() {
return {
list:[],
total:50,
params:{
page:1,//页码
size:2//每页显示个数
}
}

3)定义分页方法,接收页码参数

//分页查询,接收page页码
changePage(page){
this.params.page = page;
this.query()
}

7.使用钩子函数实现进入页面时立即查询

目前实现的功能是进入页面点击查询按钮向服务端表求查询,实际的需求是进入页面立即查询。如何实现?

这要用到vue的钩子函数,每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、
编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子
的函数,这给了用户在不同阶段添加自己的代码的机会。

通常使用最多的是created和mounted两个钩子:
created:vue实例已创建但是DOM元素还没有渲染生成。
mounted:DOM元素渲染生成完成后调用。

本例子在两个方法的任意一个都满足需求:
添加如下代码:

mounted() {
//默认查询页面
this.query()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学成在线--3.CMS页面管理开发(自定义条件查询)

文章目录0.需求分析1.服务端--Dao2.服务端--Service3.服务端--Controller4.前端1&#xff09;page_list.vue中增加查询表单2&#xff09;page_list.vue中添加数据模型对象3&#xff09;在钩子方法中构建siteList站点列5.Api调用1&#xff09;修改 cms.js&#xff0c;向服务端传…

动态生成表格、隐藏表格、选中删除任意行、jquery、输入验证

PS&#xff1a; 游戏公司后台开发&#xff0c;工作模式&#xff1a;996。 于是写博客这事也荒废了.... 想想还是写一点吧。 呵呵&#xff0c;请不要笑话我注释写这么多&#xff0c;习惯了&#xff0c;我上班写代码都是有注释的。 我建两个相似的表是为了&#xff0c;给后台使…

安装 PrestaShop 1.6 - 详细的安装指南

2019独角兽企业重金招聘Python工程师标准>>> 详细的安装指南 下载和解压 PrestaShop 程序代码包 你可以从 PrestaShop 官方下载最新的版本&#xff0c;下载地址为&#xff1a;http://www.prestashop.com/en/download. 这里你只有一个选项&#xff0c;只能下载最新的…

学成在线--4.CMS页面管理开发(新增页面)

文章目录1.定义新增页面接口1&#xff09;在model工程中定义响应模型2&#xff09;在api工程中添加接口2.新增页面服务端开发1&#xff09;Dao2&#xff09;Service3&#xff09;Controller3.新增页面前端开发1&#xff09;创建page_add.vue2&#xff09;配置路由3&#xff09;…

嵌套For循环性能优化

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。1 案例描述某日&#xff0c;在JavaEye上看到一道面试题&#xff0c;题目是这样的&#xff1a;请对以下的代码进行优化 Java代码 for (int …

python-study-17

复习 上节课复习1、什么是模块模块是一系列功能的集合体2、为何用模块拿来&#xff08;内置或第三方的模块&#xff09;主义&#xff0c;提升开发效率自定义模块可以让程序的各部分组件重用模块内的功能3、如何用模块大前提&#xff1a;模块是被执行文件导入使用&#xff0c;模…

学成在线--5.CMS页面管理开发(修改页面)

文章目录1.修改页面流程1&#xff09;前端逻辑2&#xff09;后端逻辑2.修改页面接口定义3.后端开发--Dao4.后端开发--Service5.后端开发--Controller1&#xff09;根据id查询页面2&#xff09;保存页面信息6.前端开发--页面处理流程7.前端开发--编写page_edit.vue8.前端开发--配…

Map四种获取key和value值的方法,以及对map中的元素排序

2019独角兽企业重金招聘Python工程师标准>>> 获取map的值主要有四种方法&#xff0c;这四种方法又分为两类: 一类是调用map.keySet()方法来获取key和value的值&#xff0c; 另一类则是通过map.entrySet()方法来取值&#xff0c; 两者的区别在于&#xff0c;前者主要…

HTTP 协议(详解)

HTTP协议简介&#xff1a;HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写&#xff0c;是用于万维网&#xff08;www.world wide web&#xff09;服务器与本地浏览器之间传输文本的传输协议。 http请求协议与相应协议HTTP协议包含浏览器发送数据到服务器需要遵循…

React Native集成Redux框架讲解与应用

学过React Native的都知道&#xff0c;RN的UI是根据相应组件的state进行render的&#xff0c;而页面又是由大大小小的组件构成&#xff0c;导致每个组件都必须维护自身的一套状态&#xff0c;因此当页面复杂化的时候&#xff0c;管理state会相当吃力的。而redux提供了一套机制来…

学成在线--7.CMS页面管理开发(异常处理)

文章目录1.异常处理的问题分析2.异常处理流程3.可预知异常处理1.自定义异常类2.异常抛出类3.异常捕获类4.异常处理测试1&#xff09;定义错误代码2&#xff09;异常处理测试4.不可预知异常处理1.定义异常捕获方法1&#xff09;异常抛出测试2&#xff09;异常捕获方法1.异常处理…

Django(6)

为什么不用_set related_name和related_query_name的区别related_name将成为相关对象的属性&#xff0c;允许您使用外键对模型进行“倒退”。例如&#xff0c;如果ModelA有像下面这样的字段&#xff0c;那么model_b ForeignKeyField(ModelB, related_namemodel_as)这将使您能够…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a…

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1]&#xff0c;这两个算法虽然在90年代初就提出来了&#xff0c;但作为经典的算法&#xff0c;国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用&#xff0c;并未对其进行详尽的分析&…

SpringMVC详细示例实战教程

一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

学成在线--8.Freemarker入门教程

文章目录1.FreeMarker介绍1&#xff09;常用的java模板引擎还有哪些&#xff1f;2&#xff09;freemarker是一个用Java开发的模板引擎3&#xff09;模板数据模型输出2.FreeMarker快速入门1&#xff09;创建测试工程2&#xff09;配置文件3&#xff09;创建模型类4&#xff09;创…

if...elif...else...fi和case...esac的脚本条件判断式

注意1&#xff1a; if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分&#xff1f; 『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的&#xff0c; 如果符合状态就进行某些行为&#xff0c;并且透过较多层次 (就是elif ) 的方式来进行多个变量…

安卓自定义View进阶-分类与流程

自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法&#xff0c;非官方)&#xff1a; 1.自定义ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件&#xff0c;大多继承自ViewGroup或各种Layout&…

【笔试记录】2021/3/13美团

2021/3/13美团笔试 1.旋转二维数组 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)输入输出 2.找出输入字符串中的所有数字 s input() n …

学成在线--9.页面静态化

文章目录一.页面静态化流程二.数据模型1.轮播图DataUrl接口1&#xff09;需求分析2&#xff09;接口定义3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;测试2.远程请求接口1&#xff09;添加依赖2&#xff09;配置RestTemplate3&#xff09;测试Re…