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://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
亚洲一区二区三区在线视频| 最近2019年手机中文字幕| 日韩美女视频免费在线观看| 色婷婷**av毛片一区| 国产精品av网站| 亚洲午夜色婷婷在线| 欧美乱大交做爰xxxⅹ性3| 日韩精品高清在线观看| 亚洲va久久久噜噜噜| 欧美激情一级精品国产| 国产亚洲精品久久久久动| 不卡av在线播放| 国产精品美女呻吟| 91国内精品久久| 精品国内自产拍在线观看| 欧美国产日韩一区二区在线观看| 亚洲午夜久久久久久久| 久久久国产精品亚洲一区| xvideos亚洲人网站| 欧美乱大交xxxxx另类电影| 亚洲欧洲午夜一线一品| 国产成人精品亚洲精品| 亚洲国产天堂久久国产91| 成人免费淫片视频软件| 国产自摸综合网| 国产深夜精品福利| 欧美性猛交xxxx| 日本欧美在线视频| 欧美大成色www永久网站婷| 91免费看片网站| 性色av一区二区三区红粉影视| 国产精品午夜国产小视频| 欧美日韩在线观看视频小说| 欧美日韩高清区| 97国产精品免费视频| 亚洲第一免费播放区| 久久精品国产成人精品| 欧美放荡办公室videos4k| 欧美大片欧美激情性色a∨久久| 日韩电影大片中文字幕| 久久国产精品影视| 精品国产一区二区三区久久久| 欧美激情三级免费| 日韩男女性生活视频| 日韩亚洲精品视频| 欧美在线视频导航| 粗暴蹂躏中文一区二区三区| 午夜精品一区二区三区视频免费看| 91九色单男在线观看| 国产精品欧美激情| 国产精品视频久久| 中文字幕av一区二区三区谷原希美| 97碰在线观看| 性夜试看影院91社区| 精品国产拍在线观看| 国产999精品| 国产精品久久不能| 自拍亚洲一区欧美另类| 国产精品久久视频| 欧美性猛交xxxx乱大交3| 久久影院中文字幕| 国产欧美日韩中文| 狠狠久久五月精品中文字幕| 亚洲精品在线91| 亚洲国产精久久久久久| 亚洲综合一区二区不卡| 7777免费精品视频| 欧美激情网站在线观看| 日韩精品视频三区| 亚洲永久在线观看| 欧美激情第三页| 日韩精品中文字幕有码专区| 国产成人精品a视频一区www| 在线看日韩av| 亚洲成色777777在线观看影院| 日韩欧美在线免费| www国产亚洲精品久久网站| 91精品国产自产在线观看永久| 国产亚洲精品久久久| 亚洲欧美另类中文字幕| 国产在线精品成人一区二区三区| 亚洲激情视频在线播放| 中文字幕亚洲欧美| 91久久久精品| 日韩国产在线播放| 久久亚洲精品中文字幕冲田杏梨| www.日韩系列| 亚洲国产女人aaa毛片在线| 国产成人一区二区| 欧美成人精品在线播放| 日韩国产中文字幕| www.欧美精品| 亚洲欧美制服丝袜| 国产精品视频色| 成人妇女淫片aaaa视频| 亚洲精品视频在线观看视频| 欧美诱惑福利视频| 色妞久久福利网| 欧美黑人国产人伦爽爽爽| 亚洲图片欧美午夜| 性欧美暴力猛交69hd| 日本久久久久久久| 美女福利精品视频| 国产精品视频资源| 中文字幕免费精品一区高清| 国产精品久久久久久超碰| 亚洲欧美视频在线| 91丝袜美腿美女视频网站| 欧美丰满片xxx777| 欧美国产亚洲精品久久久8v| 国产性色av一区二区| 日韩视频欧美视频| 日韩成人在线视频观看| 26uuu另类亚洲欧美日本老年| 最近2019中文免费高清视频观看www99| 欧美日韩在线视频观看| 韩国国内大量揄拍精品视频| 最近2019免费中文字幕视频三| 麻豆国产va免费精品高清在线| 亚洲成人黄色在线| 国产精品久久久亚洲| 韩国欧美亚洲国产| 欧美午夜xxx| 欧美日韩福利视频| 97人人模人人爽人人喊中文字| 色播久久人人爽人人爽人人片视av| 成人性生交xxxxx网站| 成人中文字幕+乱码+中文字幕| 国产不卡精品视男人的天堂| 亚洲人成电影在线观看天堂色| 97在线观看免费| 久久影视免费观看| 欧美日本亚洲视频| 久久精品久久精品亚洲人| 中文字幕亚洲天堂| 久久人人爽人人爽爽久久| 亚洲成**性毛茸茸| 国产精品久久久久久久7电影| 色噜噜狠狠狠综合曰曰曰88av| 欧美日韩xxx| 亚洲国产精品大全| 国产精欧美一区二区三区| 成人激情春色网| 亚洲综合大片69999| 最新国产成人av网站网址麻豆| 国产精品欧美日韩久久| 亚洲第一区第一页| 日韩成人av网| 亚洲第一视频网站| 日韩av理论片| 久久久久久久久91| 亚洲欧洲自拍偷拍| 97精品免费视频| 日本高清不卡的在线| 亚洲成人激情小说| 亚洲欧美制服综合另类| 在线成人一区二区| 亚洲一区二区在线| 久久久久久亚洲精品不卡| 日韩av大片免费看| 亚洲欧美成人一区二区在线电影| 欧美成人免费va影院高清| 日韩精品在线视频美女| 91免费观看网站|