目录
在构建项目时,如果选择axios组件,nuxt.js将自动与axios进行整合

步骤1:package.json有axios的版本

- "dependencies": {
- "@nuxtjs/axios": "^5.13.1",
- },
步骤2:安装
npm install 步骤3:nuxt.config.js 以模块的方式添加axios

- modules: [
- // https://go.nuxtjs.dev/axios
- '@nuxtjs/axios',
- ],
修改 nuxt.config.js 进行baseURL的配置

- // Axios module configuration: https://go.nuxtjs.dev/config-axios
- axios: {
- baseURL:'http://localhost:10010/'
- },
在vue页面中,通过 this.$axios.xxx() 操作ajax。this.$axios 与之前 axios等效。
- this.$axios.post("/search-service/search",this.searchMap).then( res => {
- //获得查询结果
- this.searchResult = res.data.data;
- });
asyncData中的ajax将在“前端服务端执行”,在浏览器看到是数据,而不是ajax程序。

语法:
- export default {
- async asyncData( context ) { //context就相当于其他地方的this
- //发送ajax
- let { data } = await context.$axios.get('路径','参数')
- // 返回结果
- return {变量: 查询结果从data获取 }
- },
- }
实例
- <template>
- <div>{{echo}}div>
- template>
-
- <script>
- export default {
- async asyncData(context) {
- // 发送ajax
- let {data} = await context.$axios.get('/service-consumer/feign/echo/abc')
- // 返回数据
- return {
- echo: data
- }
- },
- }
- script>
-
- <style>
-
- style>
-
语法1:
- export default {
- async asyncData( content ) {
- let [结果1,结果2] = await Promise.all([ ajax请求1, ajax请求2])
- return {
- 变量1: 结果1,
- 变量2: 结果2
- }
- },
- }
语法2:
- export default {
- async asyncData( content ) {
- let [{数据:别名1},{数据:别名2}] = await Promise.all([ ajax请求1, ajax请求2])
- return {
- 变量1: 别名1,
- 变量2: 别名2
- }
- },
- }
- //演化过程
- let response = ajax请求
- let [response,response] = await Promise.all([ajax1,ajax2])
- let [{data},{data}] = await Promise.all([ajax1,ajax2])
- let [{data:别名1},{data:别名2}] = await Promise.all([ajax1,ajax2])
实例
- <template>
- <div>{{echo}} {{echo2}}div>
- template>
-
- <script>
- export default {
- async asyncData(context) {
- // 发送ajax
- let [{data:echo}, {data:echo2}] =
- await Promise.all([
- context.$axios.get('/service-consumer/feign/echo/abc'),
- context.$axios.get('/service-consumer/client/echo/abc')
- ])
-
- // 返回数据
- return {
- echo,
- echo2
- }
- },
- }
- script>
-
- <style>
-
- style>
-
fetch 方法用于在渲染页面前填充应用的状态树(store)数据, 与 asyncData 方法类似,不同的是它不会设置组件的数据。

步骤1:创建store/index.js
- export const state = () => ({
- str: 0
- })
-
- export const mutations = {
- setData (state, value) {
- state.str = value
- }
- }
步骤2:测试页面
- <template>
- <div>
-
- {{$store.state.str}}
- div>
- template>
-
- <script>
-
- export default {
- async fetch( {store, $axios} ) {
- // 发送ajax
- let { data } = await $axios.get('/service-consumer/feign/echo/abc')
- // 设置数据
- store.commit('setData' , data )
- }
- }
- script>
-
- <style>
-
- style>
-

步骤一:在nuxt.conf.js中配置客户端插件,设置 mode 为 client
- plugins: [
- { src: '~plugins/api.js', mode: 'client' }
- //{ src: '~plugins/api.js', ssr: false }
- ],

步骤二:编写 plugins/api.js 对 内置的 $axios进行增强

- //自定义函数
- const request = {
- test : (params) => {
- return axios.get('/service-consumer/feign/echo/abc',{
- params
- })
- },
- }
-
- var axios = null
- export default ({ $axios }, inject) => {
-
- //3) 保存内置的axios
- axios = $axios
-
- //4) 将自定义函数交于nuxt
- // 使用方式1:在vue中,this.$request.xxx()
- // 使用方式2:在nuxt的asyncData中,content.app.$request.xxx()
-
- inject('request', request)
- }
-
步骤一:配置服务端插件,设置 mode 为 server
- plugins: [
- { src: '~plugins/api.js', mode: 'client' },
- { src: '~plugins/api.server.js', mode: 'server' },
- //{ src: '~plugins/api.js', ssr: false },
- //{ src: '~plugins/api.server.js', ssr: true }
- ],
步骤二:编写 plugins/api.server.js 对 内置的 $axios进行增强
- const request = {
- test : (params) => {
- return axios.get('/service-consumer/feign/echo/abc',{
- params
- })
- },
-
- }
-
- var axios = null
- export default ({ $axios, redirect, process }, inject) => {
-
- //赋值
- axios = $axios
-
- //4) 将自定义函数交于nuxt
- // 使用方式1:在vue中,this.$requestServer.xxx()
- // 使用方式2:在nuxt的asyncData中,content.app.$requestServer.xxx()
- inject('requestServer', request)
- }
-
注意:前端服务端插件,不支持切换路由。也就是说刷新可以可以访问,使用切换不能访问。解决方案:修改mode,支持client和service。
- //方式1:通过src设置文件,通过mode设置模式
- plugins: [
- { src: '~/plugins/apiclient.js', mode: 'client' }, //前端客户端
- { src: '~/plugins/apiserver.js', mode: 'server' }, //前端服务端
- { src: '~/plugins/api.js' } //前端客户端 + 前端服务端
- ]
-
- //方式2:通过命名来确定模式
- plugins: [
- '~/plugins/api.client.js', //前端客户端
- '~/plugins/api.server.js', //前端服务端
- '~/plugins/api.js', //前端客户端 + 前端服务端
- ]
步骤一:创建 store/index.js 添加一个 counter变量,并可以继续累加操作
- export const state = () => ({
- counter: 0
- })
-
- export const mutations = {
- increment (state) {
- state.counter++
- }
- }
-
步骤二:在页面中,使用
- <template>
- <div>
- 首页 {{counter}}
- <input type="button" value="+" @click="increment"/>
- div>
- template>
-
- <script>
- import { mapState,mapMutations } from 'vuex'
- export default {
- computed: {
- ...mapState(['counter'])
- },
- methods: {
- ...mapMutations(['increment'])
- },
- }
- script>
-
- <style>
-
- style>
-
步骤一:创建其他模块 store/book.js
- export const state = () => ({
- money: 0
- })
-
- export const mutations = {
- addmoney (state) {
- state.money += 5
- }
- }
步骤二:使用指定模块中的数据
- <template>
- <div>
- 首页 {{money}}
- <input type="button" value="+" @click="addmoney" />
- div>
- template>
-
- <script>
- import { mapState,mapMutations } from 'vuex'
- export default {
- computed: {
- money () {
- return this.$store.state.book.money
- }
- },
- methods: {
- ...mapMutations({
- addmoney: 'book/addmoney'
- })
- },
- }
- script>
-
- <style>
-
- style>
- // state为一个函数, 注意箭头函数写法
- const state = () => ({
- user: 'jack'
- })
-
- // mutations为一个对象
- const mutations = {
- setUser(state, value) {
- state.counter = value
- }
- }
- // action执行mutation
- const actions = {
- userAction (context,value){
- // 可以发送ajax
- context.commit('setUser',value)
- }
-
- }
-
- // 获取数据
- const getters = {
- getUser (state) {
- return state.user
- }
- }
- export default {
- namespace: true, // 命名空间,强制要求,在使用时,加上所属的模块名,例如:book/addmoney
- state,
- mutations,
- actions,
- getters
- }
-

表结构
- #班级表
- create table tab_class(
- cid int primary key auto_increment,
- cname varchar(50)
- );
- insert into tab_class(cid, cname) values(1,'Java56');
- insert into tab_class(cid, cname) values(2,'Java78');
-
- #学生表
- create table tab_student(
- sid int primary key auto_increment,
- sname varchar(50),
- cid int
- );
-
- insert into tab_student(sname,cid) values('张三',1);
- insert into tab_student(sname,cid) values('李四',1);
- insert into tab_student(sname,cid) values('王五',2);
- insert into tab_student(sname,cid) values('赵六',2);
-
需求:查询学生列表信息
- CREATE TABLE tb_teacher(
- tid INT PRIMARY KEY AUTO_INCREMENT,
- tname VARCHAR(50) COMMENT '老师姓名',
- TYPE INT COMMENT '老师类型:1.授课老师、2.助理老师、3.辅导员老师'
- );
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(1,'梁桐老师',1);
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(2,'马坤老师',2);
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(3,'仲燕老师',3);
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(4,'袁新奇老师',1);
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(5,'任林达老师',2);
- INSERT INTO tb_teacher(tid,tname,TYPE) VALUES(6,'王珊珊老师',3);
-
- CREATE TABLE tb_class(
- cid INT PRIMARY KEY AUTO_INCREMENT,
- cname VARCHAR(50) COMMENT '班级名称',
- teacher1_id INT COMMENT '授课老师',
- teacher2_id INT COMMENT '助理老师',
- teacher3_id INT COMMENT '辅导员老师'
- );
-
- INSERT INTO tb_class(cid,cname,teacher1_id,teacher2_id,teacher3_id) VALUES(1,'Java56',1,2,3);
- INSERT INTO tb_class(cid,cname,teacher1_id,teacher2_id,teacher3_id) VALUES(2,'Java78',1,2,3);
- INSERT INTO tb_class(cid,cname,teacher1_id,teacher2_id,teacher3_id) VALUES(3,'Java12',4,5,6);
- INSERT INTO tb_class(cid,cname,teacher1_id,teacher2_id,teacher3_id) VALUES(4,'Java34',4,5,6);
-
需求:使用“自定义axios”完成
查询班级详情
通过班级名称模糊查询
查询班级的同时,查询老师信息

