92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

你不知道的vue——vue不常用的知識點的整理

2020-8-13    前端達人

你不知道的vue——vue不常用的知識點的整理

  1. v-cloak: 使用 v-cloak 指令可以有效解決屏幕閃動。

    有時候,頁面沒渲染之前就會出現vue代碼塊,例如下圖。使用v-cloak可以很好解決這種問題。
    在這里插入圖片描述

    <template> <div class="hello"> <span v-cloak>{{ content }}</span> </div> </template> <script> export default { name: "hello", data() { return { content: "測試" }; } }; </script> <style scoped> /* v-cloak這個屬性會在頁面渲染前作用于對應dom 在渲染完畢這個里面的樣式將被移除 */ [v-cloak] { display: none; } </style>  
            
  2. keep-alive

    官網是這么解釋的:

    在這里插入圖片描述

    例如:可以實現頁面緩存,比如從編輯頁切出去再切進來,頁面還是處于編輯狀態.

    1. 需要在router.js中設置meta屬性,meta下的keepAlive屬性設置為true,代表這個頁面需要進行緩存。

      import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' import is from '@/view/is' import list from '@/view/list' import detail from '@/view/detail' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld, meta: { keepAlive: false, title: 'HelloWorld' } }, { path: '/is', name: 'is', component: is, meta: { keepAlive: false, title: 'is' } }, { path: '/list', name: 'list', component: list, meta: { keepAlive: true, title: 'list' } }, { path: '/detail', name: 'detail', component: detail, meta: { keepAlive: true, title: 'detail' } } ] })  
                      
    2. app.vue中修改一下代碼<router-view />

      <template> <div id="app"> <keep-alive> <!--緩存組件--> <router-view v-if="$route.meta.keepAlive" /> </keep-alive> <!--非緩存組件--> <router-view v-if="!$route.meta.keepAlive" /> </div> </template> <script> export default { name: "App" }; </script> <style> #app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } </style>  
                      
    3. 在詳情頁detail.vue中,注意beforeRouteEnterbeforeRouteLeave兩個方法。

      <template> <div class="detail"> <!-- form表單,用于測試是否緩存 --> <Form ref="formCustom" :model="formItem" :label-width="80"> <FormItem label="Input"> <Input v-model="formItem.input" placeholder="Enter something..."></Input> </FormItem> <FormItem label="Select"> <Select v-model="formItem.select"> <Option value="beijing">New York</Option> <Option value="shanghai">London</Option> <Option value="shenzhen">Sydney</Option> </Select> </FormItem> <FormItem label="DatePicker"> <Row> <Col span="11"> <DatePicker type="date" placeholder="Select date" v-model="formItem.date"></DatePicker> </Col> <Col span="2" style="text-align: center">-</Col> <Col span="11"> <TimePicker type="time" placeholder="Select time" v-model="formItem.time"></TimePicker> </Col> </Row> </FormItem> <FormItem label="Radio"> <RadioGroup v-model="formItem.radio"> <Radio label="male">Male</Radio> <Radio label="female">Female</Radio> </RadioGroup> </FormItem> <FormItem label="Checkbox"> <CheckboxGroup v-model="formItem.checkbox"> <Checkbox label="Eat"></Checkbox> <Checkbox label="Sleep"></Checkbox> <Checkbox label="Run"></Checkbox> <Checkbox label="Movie"></Checkbox> </CheckboxGroup> </FormItem> <FormItem label="Switch"> <i-switch v-model="formItem.switch" size="large"> <span slot="open">On</span> <span slot="close">Off</span> </i-switch> </FormItem> <FormItem label="Slider"> <Slider v-model="formItem.slider" range></Slider> </FormItem> <FormItem label="Text"> <Input
                          v-model="formItem.textarea" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..." ></Input> </FormItem> <FormItem> <Button type="primary">Submit</Button> <Button style="margin-left: 8px">Cancel</Button> </FormItem> <FormItem> <router-link :to="{name:'list'}"> <Button size="small" type="primary">跳轉到列表頁</Button> </router-link> <router-link :to="{name:'is'}"> <Button size="small" type="primary">跳轉到is頁</Button> </router-link> </FormItem> </Form> </div> </template> <script> export default { name: "detail", mixins: [], components: {}, filters: {}, props: [], computed: {}, data() { return { formItem: { input: "", select: "", radio: "male", checkbox: [], switch: true, date: "", time: "", slider: [20, 50], textarea: "" } }; }, watch: {}, created() { }, mounted() { }, methods: { // 重置表單 init() { this.$refs[formCustom].resetFields(); } }, // 路由進來之前,判斷是從哪個頁面過來的,設置不同的keepAlive屬性 beforeRouteEnter(to, from, next) { if (from.name === "list") { to.meta.keepAlive = true; } else { to.meta.keepAlive = false; } next(); // beforeRouteEnter不能通過this訪問組件實例,但是可以通過 vm 訪問組件實例(剛開始錯誤寫法) // next(vm => { //     if (from.name === "list") { //         // 在這里修改keepAlive值,是不能緩存數據的,因為在next()里面的代碼,是在vue掛載之后執行,處于activated之后,此時activated中keepAlive還是false //         vm.$route.meta.keepAlive = true; //     } else { //         vm.$route.meta.keepAlive = false; //     } // }); }, // 路由離開之前,判斷去往哪個頁面,設置不同的keepAlive屬性 beforeRouteLeave(to, from, next) { if (to.name === "list") { this.$route.meta.keepAlive = true; } else { this.$route.meta.keepAlive = false; } next(); }, activated() { // 此方法在頁面緩存時會被調用(this.$route.meta.keepAlive為true時),根據路由元信息決定是否重新加載數據。不加載則是上次填寫完的數據 // console.log(this.$route.meta.keepAlive); } }; </script> <style scoped lang="less"> .detail { position: relative; height: 100%; width: 100%; } </style>  
                      
  3. 插槽slot
    解構插槽 Prop:可以傳遞子組件的變量

    // 子組件 <template> <div class="isComponent"> <slot name='one' :childStr='childStr'></slot> <slot name='two'></slot> <slot></slot> </div> </template> <script> export default { name: "isComponent", data() { return { childStr: 'i am a child', }; } }; </script> <style scoped> </style> // 父組件 <is-component> <template #one="{childStr}">{{childStr}}</template> <template v-slot:two> two </template> <template> default </template> </is-component>  
            

    效果:// i am a child two default

  4. 強制刷新某個div

    vue實現F5刷新整個頁面無空白無間隔時間

  5. 修飾符
    事件修飾符:

    1. .stop:相當于原生JS中event.stopPropagation(),阻止事件冒泡。

    2. .prevent:相當于原生JS中event.preventDefault(),阻止默認事件的發生。

    3. .capture:事件冒泡的方向相反,事件捕獲由外到內。即有冒泡發生時,有該修飾符的dom元素會先執行,如果有多個,從外到內依次執行。

    4. .self:只會觸發自己范圍內的事件,不包含子元素。
      在這里插入圖片描述

    5. .once:事件只能觸發一次。

    6. .passive:事件會執行默認方法。

      注:

      1. 每次事件產生,瀏覽器都會去查詢一下是否有preventDefault阻止該次事件的默認動作。我們加上passive就是為了告訴瀏覽器,不用查詢了,我們沒用preventDefault阻止默認動作。
      2. passiveprevent沖突,不能同時綁定在一個監聽器上

    按鍵修飾符: 去官網查看即可,這里不過多解釋。Vue.js-修飾符

  6. :is: 動態組件

    優點:使代碼更符合HTML語法驗證

    官網是這么解釋的
    在這里插入圖片描述

    // 父組件: <template> <div class="is"> <table> <tr :is='is'></tr> </table> </div> </template> <script> import isComponent from '../components/isComponent' export default { name: "is", components: { isComponent }, data() { return { is: 'isComponent' }; } }; </script> <style scoped> </style> // 子組件: <template> <div class="isComponent"> <span>我是tr</span> </div> </template> <script> export default { name: "isComponent", data() { return {}; } }; </script> <style scoped> </style>  
            
  7. @click.native: 在封裝好的組件上使用,要加上.native才能click。

    1. router-link 加上@click事件,綁定的事件會無效因為:router-link的作用是單純的路由跳轉,會阻止click事件,你可以試試只用click不用native,事件是不會觸發的。此時加上.native,才會觸發事件。
    2. 根據Vue2.0官方文檔關于父子組件通訊的原則,父組件通過prop傳遞數據給子組件,子組件觸發事件給父組件。但父組件想在子組件上監聽自己的click的話,需要加上native修飾符。

    // router-link <router-link :to="{name:'detail'}" @click.native="handleNative"> <Button size="small" type="primary">測試native</Button> </router-link> // 自己封裝的組件 <is-component @click.native="handleNative"></is-component>


作者:

轉自:https://blog.csdn.net/a5252145/article/details/107316953?utm_medium=distribute.pc_category.427508.nonecase&depth_1-utm_source=distribute.pc_category.427508.nonecase

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
亚洲三级电影| 国产精品久久乐| 国产一区av在线| 亚洲自拍欧美精品| 国产成人免费网站| 欧美人与性动交α欧美精品济南到| 最近2019中文免费高清视频观看www99| 嫩草伊人久久精品少妇av杨幂| 麻豆一区二区在线观看| 成人不卡免费av| 在线观看亚洲精品视频| fc2在线中文字幕| 欧美日韩一区二区三区视频| 亚洲一区二区三区四区在线| 97精品视频在线观看自产线路二| 国产69精品久久| 97视频人免费观看| 国产精品久久久久久一区二区三区| 亚洲国产精品久久久久秋霞不卡| 国产一区二区在线视频| 多野结衣av一区| 国产欧美一区二区精品久久久| 日欧美一区二区| 羞羞电影在线观看www| 天天躁日日躁狠狠躁欧美| 色94色欧美sute亚洲13| 青青草国产精品| 国产日产久久高清欧美一区| 欧美精品久久天天躁| 国产精品xvideos88| 日韩亚洲欧美精品| 精品国产精品一区二区夜夜嗨| 婷婷丁香在线| 精品激情国产视频| 国产在线播放精品| 人禽交欧美网站| 美女高潮视频在线看| 欧美性猛交xxxx久久久| 国产综合久久| 精品国产一区二区三区久久| 国产午夜精品一区二区三区四区| 国产精品99久久久| 欧美视频第二页| 亚洲国产精品影院| 亚洲二区三区不卡| 亚洲精品国产一区二区三区四区在线| www999久久| 欧美日韩一区二区三区在线看| 国产在线激情视频| 久久亚洲一级片| 国产一区二区0| **日韩最新| 欧美性大战久久| 91精品国产自产在线老师啪| 国产一区二区三区久久久| 91精品国产综合久久蜜臀| 偷偷要91色婷婷| 亚洲欧美日本国产有色| 在线免费观看黄色| 一区二区三区精品视频在线| 久久久影院一区二区三区| 久久一级电影| 国产福利小视频在线观看| 99热这里都是精品| 精品一区二区三区影院在线午夜| 国产精品一区二区av| 欧美日韩免费一区二区三区视频| 五月婷婷激情综合| 亚洲无线码一区二区三区| 欧美大片免费观看网址| 国产一区日韩二区欧美三区| 欧美人伦禁忌dvd放荡欲情| 国产自产自拍视频在线观看| 国产精品一区二区三区在线播放| 欧美一级高清大全免费观看| 欧美亚洲国产一区二区三区| 欧美日韩亚洲91| 综合在线视频| 日韩欧美国产中文字幕| 在线一区二区三区四区| 亚洲成av人片在线观看www| 国产精品.xx视频.xxtv| 日韩欧美在线网址| 欧美三级xxx| 2019日本中文字幕| 亚洲一级高清| 亚洲精品综合久久中文字幕| 久久女同精品一区二区| 日韩精品在线视频| 亚洲qvod图片区电影| 欧美日韩精品一区二区天天拍小说| 国产成人77亚洲精品www| 日本一区二区三区视频在线| 99在线视频免费观看| 久久久综合九色合综国产精品| 免费在线国产精品| 欧美绝顶高潮抽搐喷水合集| 99国产一区二区三精品乱码| 成人性生交大片免费看中文| 成人免费av网站| 九九在线高清精品视频| 日韩在线视频网站| 第一sis亚洲原创| 亚洲国产高清在线| 日韩欧美精品一区| 亚洲精品国产高清久久伦理二区| 天天影视色香欲综合网老头| 九色porny自拍视频在线观看| 久久人人看视频| 亚洲青色在线| 中文精品视频| 国产精品爽爽爽| 国产日韩欧美电影在线观看| 国产亚洲欧美在线| 久久影院100000精品| 亚洲乱码中文字幕综合| 欧美国产日韩中文字幕在线| 久久精品99国产精品日本| 国精品**一区二区三区在线蜜桃| 成人国产精品一区二区| 亚洲性视频在线| 久久综合成人精品亚洲另类欧美| 国产精品夫妻自拍| 91青青在线视频| 午夜精彩视频在线观看不卡| 久久成人国产| 欧美日韩激情美女| 日韩欧美有码在线| 欧美一区二区精品久久911| 久久这里精品国产99丫e6| 国产欧美日韩不卡免费| 91精品国产自产在线观看永久∴| 欧美xxxx黑人又粗又长| 国产福利电影在线播放| 91精品中文字幕一区二区三区| 综合中文字幕| 日韩视频专区| 欧美黄色片在线观看| 97免费高清电视剧观看| 亚洲人午夜精品免费| 麻豆传媒视频在线观看| 亚洲va欧美va人人爽| 国产美女精品免费电影| 日韩精品三级| 欧美综合一区| 亚洲国产精品久久人人爱| 国产不卡高清在线观看视频| 亚洲国产另类久久久精品极度| 91精品国产91久久久| 亚洲国产另类久久精品| 日韩在线中文视频| 91成人性视频| 91热福利电影| 色一情一乱一区二区| 性久久久久久久| 欧美一级夜夜爽| 欧美国产激情一区二区三区蜜月| 久久精品国产一区二区电影| 欧美电视剧在线看免费| 欧美美女视频| 嫩草伊人久久精品少妇av杨幂| 久久久亚洲综合| 亚洲国产日韩一区二区| 亚洲欧洲高清在线|