国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建

這篇具有很好參考價(jià)值的文章主要介紹了【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、Mock.js

1.1?mockjs介紹

1.2 mock.js安裝與配置

1.2.1 安裝mock.js

1.2.2 引入mock.js

1.3 mock.js的使用

1.3.1?準(zhǔn)備模擬數(shù)據(jù)

1.3.2?定義攔截路由

1.3.3 測(cè)試

二、首頁(yè)導(dǎo)航欄左側(cè)菜單搭建

2.1 自定義界面組件 (完整代碼)

2.2 配置路由

2.3?組件顯示折疊和展示圖標(biāo)

2.4 總線(xiàn)完成組件通信

2.5 效果展示


一、Mock.js

1.1?mockjs介紹

????????Mock.js是一個(gè)用于生成隨機(jī)數(shù)據(jù)和模擬接口請(qǐng)求的JavaScript庫(kù)。它可以幫助開(kāi)發(fā)人員在前端開(kāi)發(fā)過(guò)程中模擬后端接口的返回?cái)?shù)據(jù),以便進(jìn)行前端頁(yè)面的開(kāi)發(fā)和測(cè)試。

Mock.js有兩個(gè)重要的特性風(fēng)靡前端:

  • 數(shù)據(jù)類(lèi)型豐富

????????Mock.js提供了一套簡(jiǎn)單易用的API,可以用于生成各種類(lèi)型的隨機(jī)數(shù)據(jù),如字符串、數(shù)字、布爾值、日期等。開(kāi)發(fā)人員可以使用Mock.js定義接口的返回?cái)?shù)據(jù)結(jié)構(gòu),并生成符合該結(jié)構(gòu)的隨機(jī)數(shù)據(jù)。

  • 攔截Ajax請(qǐng)求

????????通過(guò)攔截Ajax請(qǐng)求,Mock.js可以截獲前端發(fā)送的請(qǐng)求,并根據(jù)預(yù)先定義的規(guī)則返回模擬的數(shù)據(jù)。延時(shí)響應(yīng)功能可以模擬網(wǎng)絡(luò)延遲,以便測(cè)試頁(yè)面在不同網(wǎng)絡(luò)條件下的表現(xiàn)。動(dòng)態(tài)數(shù)據(jù)生成功能可以根據(jù)請(qǐng)求參數(shù)生成符合條件的隨機(jī)數(shù)據(jù)。不需要修改既有代碼,就可以攔截Ajax請(qǐng)求,返回模擬的響應(yīng)數(shù)據(jù)。

1.2 mock.js安裝與配置

1.2.1 安裝mock.js

npm i mockjs -D

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript

tips:在前面也講到了-S,-G兩種命令行的選項(xiàng),這里綜合講解一下這三種的區(qū)別

  • -S選項(xiàng)用于啟動(dòng)開(kāi)發(fā)服務(wù)器
  • -D選項(xiàng)用于在啟動(dòng)開(kāi)發(fā)服務(wù)器后自動(dòng)打開(kāi)瀏覽器
  • -G選項(xiàng)用于生成代碼或文件。它們分別用于不同的開(kāi)發(fā)場(chǎng)景和需求,具體使用取決于你的目標(biāo)和任務(wù)。

1.2.2 引入mock.js

為了只在開(kāi)發(fā)環(huán)境使用mock,而打包到生產(chǎn)環(huán)境時(shí)自動(dòng)不使用mock,我們可以在config目錄中的dev.env.js?prod.env.js做一個(gè)配置,如下:

  • dev.env.js :生產(chǎn)環(huán)境

/* 開(kāi)發(fā)環(huán)境 */
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  MOCK: 'ture'
})
  • prod.env.js:開(kāi)發(fā)環(huán)境

/* 生產(chǎn)環(huán)境 */
'use strict'
module.exports = {
  NODE_ENV: '"production"',
  MOCK: 'false'
}
  • main.js

//開(kāi)發(fā)環(huán)境下才會(huì)引入mockjs
process.env.MOCK && require('@/mock') 

1.3 mock.js的使用

1.3.1?準(zhǔn)備模擬數(shù)據(jù)

為每個(gè)*.vue定義單獨(dú)的xxx-mock.js文件,并在其中添加自定義的json數(shù)據(jù),還可以通過(guò)mockjs的模塊生成隨機(jī)數(shù)據(jù)信息,動(dòng)態(tài)測(cè)試ajax請(qǐng)求效果。

創(chuàng)建src/mock/json目錄,定義登錄測(cè)試數(shù)據(jù)文件login-mock.js:

//在沒(méi)有使用mock.js前,定義數(shù)據(jù)的方式(死數(shù)據(jù))
/* const loginInfo = {
  code: -1,
  message: '密碼錯(cuò)誤'
} */

//使用mockjs的模板生成隨機(jī)數(shù)據(jù)
const loginInfo = {
  //1表示50%概率
  "success|1": true,
  //2-3指重復(fù)2到3次
  "msg|2-3": 'msg'
}

//將當(dāng)前模塊導(dǎo)出,導(dǎo)出后index.js才可以導(dǎo)入
export default loginInfo;

面試題:js中const,var,let區(qū)別?分別寫(xiě)一個(gè)例子?

1.變量提升:var存在變量提升,而let與const不存在變量提升,即在變量只能在聲明之后使用,否在會(huì)報(bào)錯(cuò)。

2.重復(fù)聲明:var定義的變量可以聲明多次,const和let不允許重復(fù)聲明變量

3.給全局添加屬性:瀏覽器的全局對(duì)象是window,Node的全局對(duì)象是global。var聲明的變量為全局變量,并且會(huì)將該變量添加為全局對(duì)象的屬性,但是let和const不會(huì)。

4.暫時(shí)性死區(qū): 在使用let、const命令聲明變量之前,該變量都是不可用的。這在語(yǔ)法上,稱(chēng)為暫時(shí)性死區(qū)。使用var聲明的變量不存在暫時(shí)性死區(qū)。

5.初始值設(shè)置: 在變量聲明時(shí),var 和 let 可以不用設(shè)置初始值。而const聲明變量必須設(shè)置初始值。

6.塊級(jí)作用域: 塊作用域由 { }包括,let和const具有塊級(jí)作用域,var不存在塊級(jí)作用域。塊級(jí)作用域解決了ES5中的兩個(gè)問(wèn)題:

  • 內(nèi)層變量可能覆蓋外層變量
  • 用來(lái)計(jì)數(shù)的循環(huán)變量泄露為全局變量

1.3.2?定義攔截路由

????????在src目錄下創(chuàng)建mock目錄,定義mock主文件index.js,并在該文件中定義攔截路由配置,/src/mock/index.js。

import Mock from 'mockjs' //引入mockjs,npm已安裝
import action from '@/api/action' //引入請(qǐng)求地址

//全局設(shè)置:設(shè)置所有ajax請(qǐng)求的超時(shí)時(shí)間,模擬網(wǎng)絡(luò)傳輸耗時(shí)
Mock.setup({
	// timeout: 400  //延時(shí)400s請(qǐng)求到數(shù)據(jù)
	timeout: 200 - 400 //延時(shí)200-400s請(qǐng)求到數(shù)據(jù)
})

//獲取請(qǐng)求的url
let url = action.getFullPath('SYSTEM_USER_DOLOGIN');
//引登陸的測(cè)試數(shù)據(jù),并添加至mockjs
import loginInfo from '@/mock/json/login-mock.js'
Mock.mock(url, "post", loginInfo)

//如果請(qǐng)求既可以是get又可以是post的請(qǐng)求方式可以使用如下方式:
// Mock.mock(s1, /post|get/i, loginInfo)

1.3.3 測(cè)試

編輯Login.vue文件,根據(jù)不同響應(yīng),給出不同提示。

<template>
  <div class="login-wrap">
    <el-form class="login-container">
      <h1 class="title">用戶(hù)登錄</h1>
      <el-form-item label="">
        <el-input type="text" v-model="username" placeholder="登錄賬號(hào)" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item label="">
        <el-input type="password" v-model="password" placeholder="登錄密碼" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="warning" style="width:100%;" @click="doSubmit()">提交</el-button>
      </el-form-item>
      <el-row style="text-align: center;margin-top:-10px">
        <el-link type="primary">忘記密碼</el-link>
        <el-link type="primary" @click="gotoRegister()">用戶(hù)注冊(cè)</el-link>
      </el-row>
    </el-form>
  </div>
</template>

<script>
  export default {
    name: 'Login',
    data() {
      return {
        username: '',
        password: ''
      }
    },
    methods: {
      gotoRegister() {
        this.$router.push("/Register");
      },
      doSubmit() {
        //定義后臺(tái)登錄方法連接地址
        let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
        //獲取數(shù)據(jù)
        let params = {
          username: this.username,
          password: this.password
        };
        /* get請(qǐng)求進(jìn)行參數(shù)傳遞 */
        this.axios.get(url, {
          params: params
        }).then(r => {
          console.log(r);

          //提示成功和失敗,主要演示獲取響應(yīng)數(shù)據(jù)的方法
          if (r.data.success) {
            //可以到element-ui官網(wǎng)查看用法
            this.$message({
              message: '登錄成功',
              type: 'success'
            });
          }else{
            this.$message({
              message: '登錄失敗',
              type: 'error'
            });
          }
        }).catch(e => {
          //異常信息
        });

      }
    }
  }
</script>

<style scoped>
  .login-wrap {
    box-sizing: border-box;
    width: 100%;
    height: 100%;
    padding-top: 10%;
    background-image: url('/static/imgs/books2.jpg');
    /* background-color: #3b7cf5; */
    background-repeat: no-repeat;
    background-position: center right;
    background-size: 100%;
  }

  .login-container {
    border-radius: 10px;
    margin: 0px auto;
    width: 350px;
    padding: 30px 35px 15px 35px;
    border: 1px solid #eaeaea;
    text-align: left;
    background-color: rgba(229, 229, 229, 0.8);
  }

  .title {
    margin: 0px auto 40px auto;
    text-align: center;
    color: #0b0b0b;
  }
</style>

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript

這樣就不需要跟后臺(tái)進(jìn)行交互,通過(guò)mock.js模擬數(shù)據(jù)進(jìn)行功能測(cè)試。

二、首頁(yè)導(dǎo)航欄左側(cè)菜單搭建

2.1 自定義界面組件 (完整代碼)

1. AppMain.vue 界面總?cè)萜?/strong>

<template>
  <el-container class="main-container">
    <el-aside v-bind:class="asideClass">
      <LeftNav></LeftNav>
    </el-aside>
    <el-container>
      <el-header class="main-header">
        <TopNav></TopNav>
      </el-header>
      <el-main class="main-center">首頁(yè)</el-main>
    </el-container>
  </el-container>
</template>

<script>
  // 導(dǎo)入組件
  import TopNav from '@/components/TopNav.vue'
  import LeftNav from '@/components/LeftNav.vue'

  // 導(dǎo)出模塊
  export default {
    //組件名稱(chēng)
    name: 'AppMain',

    data: function() {
      return {
        asideClass: 'main-aside',
      }
    },

    //將import的組件定義的Main中以便于使用
    components: {
      TopNav,
      LeftNav
    },
    created() {
      this.$root.Bus.$on('aaa', r => {
        this.asideClass = r ? 'main-aside-collapsed' : 'main-aside';
      });
    }
  };
</script>
<style scoped>
  .main-container {
    height: 100%;
    width: 100%;
    box-sizing: border-box;
  }

  .main-aside-collapsed {
    /* 在CSS中,通過(guò)對(duì)某一樣式聲明! important ,可以更改默認(rèn)的CSS樣式優(yōu)先級(jí)規(guī)則,使該條樣式屬性聲明具有最高優(yōu)先級(jí) */
    width: 64px !important;
    height: 100%;
    background-color: #e2b100;
    margin: 0px;
  }

  .main-aside {
    width: 240px !important;
    height: 100%;
    background-color: #e2b100;
    margin: 0px;
  }

  .main-header,
  .main-center {
    padding: 0px;
    border-left: 2px solid #dedede;
  }
</style>

2. LegtNav.vue 左側(cè)菜單

<template>
  <el-menu default-active="2" class="el-menu-vertical-demo" background-color="#ffbf00" text-color="#fff"
    active-text-color="#ffd04b" :collapse="collapsed">
    <div class="logobox">
      <img class="logoimg" src="../assets/imgs/logo.png" alt="">
    </div>
    <el-submenu index="1">
      <template slot="title">
        <i class="el-icon-location"></i>
        <span>導(dǎo)航一</span>
      </template>
      <el-menu-item-group>
        <template slot="title">分組一</template>
        <el-menu-item index="1-1">選項(xiàng)1</el-menu-item>
        <el-menu-item index="1-2">選項(xiàng)2</el-menu-item>
      </el-menu-item-group>
      <el-menu-item-group title="分組2">
        <el-menu-item index="1-3">選項(xiàng)3</el-menu-item>
      </el-menu-item-group>
      <el-submenu index="1-4">
        <template slot="title">選項(xiàng)4</template>
        <el-menu-item index="1-4-1">選項(xiàng)1</el-menu-item>
      </el-submenu>
    </el-submenu>
    <el-menu-item index="2">
      <i class="el-icon-menu"></i>
      <span slot="title">導(dǎo)航二</span>
    </el-menu-item>
    <el-menu-item index="3" disabled>
      <i class="el-icon-document"></i>
      <span slot="title">導(dǎo)航三</span>
    </el-menu-item>
    <el-menu-item index="4">
      <i class="el-icon-setting"></i>
      <span slot="title">導(dǎo)航四</span>
    </el-menu-item>
  </el-menu>
</template>
<script>
  export default {
    name: 'LeftNav',

    data: function() {
      return {
        collapsed: false
      }
    },
    created() {
      this.$root.Bus.$on('aaa', r => {
        this.collapsed = r;
      });
    }
  }
</script>
<style>
  .el-menu-vertical-demo:not(.el-menu--collapse) {
    width: 240px;
    min-height: 400px;
  }

  .el-menu-vertical-demo:not(.el-menu--collapse) {
    border: none;
    text-align: left;
  }

  .el-menu-item-group__title {
    padding: 0px;
  }

  .el-menu-bg {
    background-color: #ffbf00 !important;
  }

  .el-menu {
    border: none;
  }

  .logobox {
    height: 40px;
    line-height: 40px;
    color: #9d9d9d;
    font-size: 20px;
    text-align: center;
    padding: 20px 0px;
  }

  .logoimg {
    height: 40px;
  }
</style>

3. TopNav.vue 頂部導(dǎo)航欄

<template>
  <el-menu class="el-menu-demo" mode="horizontal" background-color="#ffbf00" text-color="#fff" active-text-color="#fff">
    <el-button class="buttonimg">
      <img class="showimg" :src="collapsed?imgshow:imgsq" @click="doToggle()">
    </el-button>
    <el-submenu index="2" class="submenu">
      <template slot="title">超級(jí)管理員</template>
      <el-menu-item index="2-1">設(shè)置</el-menu-item>
      <el-menu-item index="2-2">個(gè)人中心</el-menu-item>
      <el-menu-item @click="exit()" index="2-3">退出</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

<script>
  export default {
    name: 'TopNav',

    data: function() {
      return {
        collapsed: false,
        //require是node中遵循CommonJS規(guī)范的模塊化解決方案,支持動(dòng)態(tài)引入
        imgshow: require('@/assets/imgs/show.png'),
        imgsq: require('@/assets/imgs/sq.png')
      }
    },
    methods: {
      doToggle() { //收起左側(cè)菜單事件
        this.collapsed = !this.collapsed;
        //將是否折疊的變量放入總線(xiàn)
        this.$root.Bus.$emit('aaa', this.collapsed);
      },
      exit() { //退出事件
        //跳轉(zhuǎn)登錄界面
        this.$router.push("/")
      }
    }
  }
</script>

<style scoped>
  .el-menu-vertical-demo:not(.el-menu--collapse) {
    border: none;
  }

  .submenu {
    float: right;
  }

  .buttonimg {
    height: 60px;
    background-color: transparent;
    border: none;
  }

  .showimg {
    width: 26px;
    height: 26px;
    position: absolute;
    top: 17px;
    left: 17px;
  }

  .showimg:active {
    border: none;
  }
</style>

2.2 配置路由

router/index.js, 配置路由前先導(dǎo)入Main組件

import AppMain from '@/components/AppMain'
import LeftNav from '@/components/LeftNav'
import TopNav from '@/components/TopNav'

?將LeftNav和TopNav子組件配置到AppMain總?cè)萜髦校?/p>

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Login',
      component: Login
    },{
      path: '/AppMain',
      name: 'AppMain',
      component: AppMain,
      children:[
        {
          path: '/LeftNav',
          name: 'LeftNav',
          component: LeftNav
        },{
          path: '/TopNav',
          name: 'TopNav',
          component: TopNav
        }
      ]
    }
  ]
})

?

2.3?組件顯示折疊和展示圖標(biāo)

TopNav.vue:?

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript

LeftNav.vue:?

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript?

2.4 總線(xiàn)完成組件通信

如果要完成組件整合,需要通過(guò)定義總線(xiàn)將父組件(AppMain)與子組件進(jìn)行通信;

src/mai.js:

new Vue({
  el: '#app',
  data() {
    return {
      /* 創(chuàng)建一個(gè)Bus總線(xiàn) */
      Bus: new Vue()
    }
  },
  router,
  components: {
    App
  },
  template: '<App/>'
})

TopNav.vue:?

把是否折疊的變量放入總線(xiàn)中方便其他組件調(diào)取。?

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript

LeftNav:

?在組件創(chuàng)建時(shí)訂閱了一個(gè)名為?'aaa'?的事件,并在事件觸發(fā)時(shí)將接收到的數(shù)據(jù)賦值給?collapsed?屬性。

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript?

?

AppMain.vue:

在組件創(chuàng)建時(shí)訂閱了一個(gè)名為?'aaa'?的事件,并在事件觸發(fā)時(shí)將接收到的數(shù)據(jù)賦值給?asideClass屬性(通過(guò)true或false賦予相應(yīng)的樣式)。

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript?

2.5 效果展示

【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建,Vue+ElementUI,java,vue.js,前端框架,javascript文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716903.html

到了這里,關(guān)于【Vue】Mock.js介紹和使用與首頁(yè)導(dǎo)航欄左側(cè)菜單搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包