成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Vue多布局模式實(shí)現(xiàn)方法詳細(xì)講解

瀏覽:173日期:2022-06-10 14:05:58
目錄
  • 1、目標(biāo)效果
  • 2、原理分析

1、目標(biāo)效果

源碼地址:multipal-layout-demo: vue2實(shí)現(xiàn)多布局+暗黑模式

默認(rèn)布局:頭部寬度100%,側(cè)邊欄、內(nèi)容區(qū)

頂部布局:頭部寬度100%,內(nèi)容區(qū)

側(cè)邊欄布局:側(cè)邊欄高度100%,頭部、內(nèi)容區(qū)

2、原理分析

(1)vuex文件

import Vue from "vue"import Vuex from "vuex"Vue.use(Vuex)export default new Vuex.Store({  state: {    // 暗黑模式    isDark: false,    // 布局類型    layoutType: "default"  },  mutations: {    // 修改暗黑模式    set_is_dark(state, val) {      state.isDark = val    },    // 修改布局類型    set_layout_type(state, val) {      state.layoutType = val    }  },  actions: {  },  modules: {  }})

(2)布局縮略圖如何實(shí)現(xiàn)?用div + css 手動(dòng)實(shí)現(xiàn)布局樣式

父組件傳遞一個(gè)布局類型數(shù)組,遍歷此組件;用一個(gè)變量保存索引值,點(diǎn)擊不同的布局類型項(xiàng)時(shí)切換索引并在vuex修改當(dāng)前選中的布局類型

將縮略圖封裝成組件:Thumbnail.vue

<template>    <!-- 縮略圖 -->    <div><div v-for="(item, index) in layouts" @click="changeCheck(item, index)">    <template v-if="item.type == "default""><div :style="{ background: isDark ? "black" : "#fff" }"></div><div :style="{ background: isDark ? "black" : "#fff" }"></div>    </template>    <template v-if="item.type == "top""><div :style="{ background: isDark ? "black" : "#fff" }"></div>    </template>    <template v-if="item.type == "slide""><div></div><div :style="{ background: isDark ? "black" : "#fff" }"></div>    </template>    <i v-show="checked == index"></i></div>    </div></template><script>import { mapState } from "vuex"export default {    props: {// 布局類型數(shù)組layouts: {    type: Array,    default: () => []}    },    data() {return {    // 當(dāng)前選中值    checked: 0,}    },    computed: {// 獲取是否是暗黑模式,從而縮略圖實(shí)現(xiàn)暗黑效果...mapState(["isDark"])    },    methods: {// 切換選中值changeCheck(item, index) {    this.checked = index    this.$store.commit("set_layout_type", item.type)}    }}</script><style lang="less" scoped>.thumbnail {    display: flex;    width: 100%;    .layout {position: relative;width: 50px;height: 50px;border: 1px solid gray;overflow: hidden;background: #f0f0f0;border-radius: 5px;cursor: pointer;.top {    position: absolute;    left: 0;    top: 0;    width: 100%;    height: 25%;}.left {    position: absolute;    left: 0;    top: 0;    bottom: 0;    width: 25%;    height: 100%;}.el-icon-check {    position: absolute;    left: 50%;    top: 50%;    transform: translate(-50%, -50%);    font-size: 20px;}    }}</style>

(3)建立多個(gè)不同類型的布局文件:

側(cè)邊欄布局 :src/views/layout/SlideLayout.vue

<template>  <!-- 側(cè)邊欄布局 -->  <div>    <Sliderbar></Sliderbar>    <Header></Header>    <div>      <router-view />    </div>  </div></template><script>import Sliderbar from "@/components/Sliderbar.vue"import Header from "@/components/Header.vue"export default {  components: {    Header,    Sliderbar,  },}</script><style lang="less" scoped></style>

默認(rèn)布局布局:src/views/layout/DefaultLayout.vue

<template>  <!-- 默認(rèn)布局 -->  <div>    <Header></Header>    <Sliderbar></Sliderbar>    <div>      <router-view />    </div>  </div></template><script>import Header from "@/components/Header.vue"import Sliderbar from "@/components/Sliderbar.vue"export default {  components: { Header, Sliderbar },}</script><style lang="less" scoped></style>

頂部布局:src/views/layout/TopLayout.vue

<template>  <!-- 頂欄布局 -->  <div>    <Header></Header>    <div>      <router-view />    </div>  </div></template><script>import Header from "@/components/Header.vue"export default {  components: {    Header,  },}</script><style lang="less" scoped></style>

(4)首頁組件 Home.vue,Home.vue下面渲染二級(jí)路由

<template>    <!-- vuex獲取選中的布局類型 -->    <div><defaultLayout v-show="layoutType == "default""></defaultLayout><slideLayout v-show="layoutType == "slide""></slideLayout><topLayout v-show="layoutType == "top""></topLayout>    </div></template><script>import defaultLayout from "./layout/DefaultLayout.vue"import slideLayout from "./layout/SlideLayout.vue"import topLayout from "./layout/TopLayout.vue"import { mapState } from "vuex"export default {    components: { defaultLayout, slideLayout, topLayout },    computed: {...mapState(["layoutType"])    },}</script><style lang="less" scoped></style>

(5)暗黑模式、布局類型變量都是保存在vuex中,因?yàn)槎鄠€(gè)組件之間進(jìn)行數(shù)據(jù)通信比較方便!通過mapState取出vuex數(shù)據(jù),然后通過computed接受mapState值,但如果想要直接修改mapState中的值則會(huì)報(bào)以下的錯(cuò)誤:

computed property "isDark" was assigned to but it has no setter.

這是因?yàn)閏omputed為只讀的。不能直接修改computed的數(shù)據(jù),要想修改則使用set

  computed: {    ...mapState(["isDark"]),    // computed property "isDark" was assigned to but it has no setter.  這是因?yàn)閏omputed為只讀的。不能直接修改computed的數(shù)據(jù),要想修改則使用set    darkMode: {      get() {return this.isDark      },      set(val) {this.$store.commit("set_is_dark", val)// 獲取html根元素標(biāo)簽let html = document.documentElementif (val) {  // html添加class="dark"選擇器  html.classList.add("dark")} else {  // html移除class="dark"選擇器  html.classList.remove("dark")}      }    }  },

到此這篇關(guān)于Vue多布局模式實(shí)現(xiàn)方法詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue多布局模式內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日本精品视频一区二区| 亚洲全部视频| 亚洲性感激情| 久久九九99视频| 国产精品一卡二卡在线观看| 色哟哟日韩精品| 亚洲午夜电影在线观看| 在线观看视频日韩| 亚洲欧洲日本在线| 欧美精品二区三区四区免费看视频| 欧美日韩免费电影| 爽好多水快深点欧美视频| 99香蕉国产精品偷在线观看 | 99精品国产一区二区三区不卡| 555www色欧美视频| 国产老肥熟一区二区三区| 欧美性大战久久久| 免费人成精品欧美精品| 日本韩国欧美一区| 美脚の诱脚舐め脚责91| 欧美在线观看视频在线| 青娱乐精品视频在线| 久久国产免费| 亚洲第一主播视频| 先锋影音国产一区| 亚洲国产美女搞黄色| 亚欧成人精品| 五月激情综合婷婷| 亚洲欧美日韩在线观看a三区| 亚洲激情第一区| 夜夜爽av福利精品导航| 一区二区久久久久| 先锋影音一区二区三区| 日韩中文字幕麻豆| 欧美四级电影在线观看| 九色porny丨国产精品| 911精品国产一区二区在线| 国产在线播放一区二区三区| 欧美日韩国产小视频| 精品一区二区三区视频在线观看| 欧美乱妇15p| 成人免费视频一区| 国产日韩欧美精品在线| 国产精品播放| 综合久久国产九一剧情麻豆| 亚洲麻豆av| 天天综合网 天天综合色| 在线一区二区视频| 国产激情精品久久久第一区二区 | 91免费观看在线| 国产精品伦一区二区三级视频| 亚洲人成在线影院| 日韩av高清在线观看| 91精品国产91久久久久久一区二区| 不卡av在线网| 亚洲日本丝袜连裤袜办公室| 欧美亚洲视频| 国产在线麻豆精品观看| 精品少妇一区二区三区免费观看| 色综合视频在线观看| 亚洲欧洲日韩av| 久久综合福利| 国产乱人伦精品一区二区在线观看| 精品国产91九色蝌蚪| 伊人成年综合电影网| 亚洲一级二级在线| 欧美在线观看视频在线| 99在线精品观看| 亚洲精品国产精华液| 欧美性受xxxx| av网站免费线看精品| 亚洲丝袜另类动漫二区| 在线这里只有精品| 成人国产视频在线观看| 亚洲人成精品久久久久久| 欧洲亚洲国产日韩| 欧美有码视频| 午夜精品免费在线| 日韩一级免费一区| 亚洲午夜极品| 男人的天堂久久精品| 精品三级在线看| 在线综合亚洲| 国产一区91精品张津瑜| 国产精品色在线| 在线观看一区日韩| 91蜜桃免费观看视频| 天天操天天干天天综合网| 日韩欧美一级二级三级久久久| 在线观看不卡| 九九国产精品视频| 国产精品久久网站| 欧美视频中文一区二区三区在线观看| av综合在线播放| 亚洲综合色视频| 欧美喷潮久久久xxxxx| 欧美精品一区三区在线观看| 午夜av区久久| 久久精品视频在线免费观看| 亚洲一区二区三区高清| 丁香另类激情小说| 亚洲一区二区三区影院| 日韩欧美国产一二三区| 国产精品日本| 成人99免费视频| 亚洲成人精品一区| 久久青草国产手机看片福利盒子| 国产精品夜夜夜| 99久久99久久久精品齐齐| 性做久久久久久免费观看| 日韩精品一区二区三区swag| 国产精品毛片在线| 成人美女视频在线看| 午夜精品久久久久久久99水蜜桃| 欧美精品一区二区三区蜜桃| 噜噜噜躁狠狠躁狠狠精品视频| heyzo一本久久综合| 午夜在线成人av| 国产视频一区二区在线| 欧美日韩一区二区在线观看| 在线日韩av永久免费观看| 国产成人一级电影| 天天综合天天综合色| 国产色产综合产在线视频| 日本二三区不卡| 欧美精品97| 国产米奇在线777精品观看| 亚洲最大成人综合| 久久先锋影音av鲁色资源网| 欧美在线观看你懂的| 亚洲视频1区| 欧美成人一品| 国产一区二区0| 天堂av在线一区| 国产精品―色哟哟| 91精品国产欧美一区二区18| 亚洲欧美网站| 国产在线精品二区| 成人高清av在线| 狠狠色丁香婷婷综合| 五月天亚洲婷婷| 亚洲已满18点击进入久久| 亚洲国产岛国毛片在线| 日韩美女视频在线| 欧美曰成人黄网| 午夜在线视频一区二区区别| 极品中文字幕一区| 91在线观看免费视频| 国产精品一区二区久久不卡 | 欧美不卡高清| 成人av在线观| 久久99精品国产.久久久久| 亚洲国产精品欧美一二99| 国产精品国产三级国产a| 精品国产一区二区三区av性色| 欧美日韩国产综合草草| 91久久精品国产91性色tv| 亚洲伊人观看| 一区二区三区av| 91久久视频| 亚洲黄色视屏| 亚洲午夜极品| 欧美日韩日本网| 女人天堂亚洲aⅴ在线观看| 成av人片一区二区| 国产一区二区精品久久| 久久精品国产77777蜜臀| 日韩精品1区2区3区| 亚洲福利电影网| 亚洲欧美一区二区三区孕妇| 国产视频一区二区三区在线观看| 精品精品欲导航| 日韩视频免费观看高清完整版在线观看 | 亚洲国产婷婷| 欧美日韩国产探花| 欧美成人精品| 国内精品久久久久久久97牛牛| 女同一区二区| 欧美成人午夜| 韩国精品一区二区三区| 色综合久久综合网欧美综合网 | 久久久久久久久久久黄色| 2022国产精品视频| 国产亚洲女人久久久久毛片| 国产午夜精品福利| 国产亚洲成年网址在线观看| 欧美电视剧免费观看| 日韩精品自拍偷拍| 日韩欧美第一区| 亚洲精品一区在线观看| 欧美大片免费久久精品三p| 精品久久久久久综合日本欧美| 精品不卡在线视频| 国产日韩亚洲欧美综合| 国产精品久久久久久久蜜臀| 国产精品理论在线观看| 国产精品毛片a∨一区二区三区| 国产精品少妇自拍| 亚洲三级小视频| 一区二区激情小说|