最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 2.0封裝model組件的方法

 更新時間:2017年08月03日 14:33:20   作者:回調(diào)的幸福時光  
本篇文章主要介紹了vue 2.0封裝model組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了vue 2.0封裝model組件的方法,分享給大家,希望對大家有所幫助

單文件組件

使用單文件組件封裝model的模板、邏輯和樣式,之后就可以在頁面中調(diào)用此通用組件。

需求

model有兩個使用場景:

1、備注/修改密碼(簡易):

在屏幕中垂直居中
2、添加/修改/展示信息(復(fù)雜):

距離屏幕頂部200px,內(nèi)容過長時可滾動。

3、常規(guī)要求(共同點):

標題,關(guān)閉icon

點擊確定/關(guān)閉/遮罩,隱藏model組件

分析上述需求點,得到如下圖:


  • wrapper:負責(zé)遮蓋屏幕
  • inner:負責(zé)垂直居中/距頂部200px
  • title:可變化標題
  • content:可變化的內(nèi)容區(qū)域

方案

1、Prop傳參
title(標題)、show(隱藏/顯示)、width(寬度)、type(居中/頂部)

2、自定義事件
關(guān)閉model

3、slot分發(fā)
內(nèi)容區(qū)域可自定義

4、滾動穿透

具體實現(xiàn)

template

 <div class="model-mask" v-show="show">
  <div :class="[type === 'top' ? 'model-wrapper-top' : 'model-wrapper']" @click="close">
   <div :class="[type === 'top' ? 'model-container-top' : 'model-container']"
    :style="{width:width + 'px'}">
    <div class="model-header">
     <span>{{title}}</span>
     <i class="close-empty" @click="close">
      <Icon
       type="ivu-icon ivu-icon-ios-close-empty"
       size="25" />
     </i>
    </div>
    <div class="model-body">
     <slot></slot>
    </div>
   </div>
  </div>
 </div>

script

 export default {
 name: 'MyModel',
 props:
 {
  title: String,
  show: Boolean,
  width: Number,
  type: String
 },
 data () {
  return {
   scrollTop: ''
  }
 },
 watch: {
  show: function (val, oldVal) {
   function getScrollTop () {
    return document.body.scrollTop || document.documentElement.scrollTop
   }
   if (val) {
    // 在彈出層顯示之前,記錄當前的滾動位置
    this.scrollTop = getScrollTop()
    let body = document.querySelector('body')
    body.className = 'not-scroll'
    // 把脫離文檔流的body拉上去!否則頁面會回到頂部!
    document.body.style.top = -this.scrollTop + 'px'
   }
  }
 },
 methods: {
  close: function (e) {
   function to (scrollTop) {
    document.body.scrollTop = document.documentElement.scrollTop = scrollTop
   }
   let target = e.srcElement || e.target
   if (target.className === 'model-wrapper' ||
     target.className.indexOf('ivu-icon-ios-close-empty') > -1 ||
     target.className === 'model-wrapper-top') {
    this.$emit('close')
    let body = document.querySelector('body')
    body.className = ''
    // 滾回到老地方!
    to(this.scrollTop)
   }
  }
 }
}

style

 <style scoped lang="scss">
.model-mask {
 height: 100%;
 position: fixed;
 top: 0;
 bottom: 0;
 left: 0;
 right: 0;
 z-index: 1000;
 background: rgba(0, 0, 0, .5);
}
/**
 * 垂直居中
 */
.model-wrapper {
 height: 100%;
 text-align: center;
}
.model-wrapper:before {
 content: "";
 display: inline-block;
 height: 100%;
 vertical-align: middle;
}
.model-container {
 position: relative;
 display: inline-block;
 vertical-align: middle;
 background-color: white;
 text-align: left;
 box-shadow: 0 5px 14px 0 rgba(0,0,0,0.15);
 border-radius: 6px;
 overflow: hidden;
 z-index: 1050;
}
/**
 * 距離頂部100px,可滾動
 */
.model-wrapper-top {
 position: relative;
 height: 100%;
 overflow-x: hidden;
 overflow-y: scroll;
}
.model-container-top {
 margin: 100px auto;
 background-color: white;
 text-align: left;
 box-shadow: 0 5px 14px 0 rgba(0,0,0,0.15);
 border-radius: 6px;
 overflow: hidden;
}
.close-empty {
 position: absolute;
 right: 16px;
 top: 10px;
 overflow: hidden;
 cursor: pointer;
 z-index: 1100;
}
.model-header {
 position: relative;
 height: 45px;
 line-height: 45px;
 padding: 0 20px;
 font-size: 14px;
 color: #999;
 border-bottom: 1px solid #eee;
}
</style>

引用

 <button type="button" @click="showModel">戳我呀</button>
import MyModel from '../componets/model.vue'
export default {
 name: 'test',
 components: {
  MyModel
 },
 data () {
  return {
   show: false
  }
 },
 methods: {
  /**
   * 打開model
   */
  closeModel: function () {
   this.show = false
  },
  /**
   * 關(guān)閉model
   */
  showModel: function () {
   this.show = true
  }
 }
}

引用一

 <my-model title="標題" :width="400" :show="show" v-on:close="closeModel">
   <!-- slot -->
   <div class="tips">
     <p>this is content area。</p>
   </div>
  </my-model>

引用二

 <my-model type="top" title="標題" :width="400" :show="show" v-on:close="closeModel">
   <!-- slot -->
   <div class="tips">
     <p v-for="i in 50">this is content area。</p>
   </div>
  </my-model>

demo

垂直居中


距頂部200px,可滾動

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2自定義組件通過rollup配置發(fā)布到npm的詳細步驟

    vue2自定義組件通過rollup配置發(fā)布到npm的詳細步驟

    這篇文章主要介紹了vue2自定義組件通過rollup配置發(fā)布到npm,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Vue計算屬性實現(xiàn)成績單

    Vue計算屬性實現(xiàn)成績單

    這篇文章主要為大家詳細介紹了Vue計算屬性實現(xiàn)成績單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue項目webpack中Npm傳遞參數(shù)配置不同域名接口

    vue項目webpack中Npm傳遞參數(shù)配置不同域名接口

    這篇文章主要介紹了vue項目webpack中Npm傳遞參數(shù)配置不同域名接口,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • vue.js實現(xiàn)備忘錄demo

    vue.js實現(xiàn)備忘錄demo

    這篇文章主要為大家詳細介紹了vue.js實現(xiàn)備忘錄的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 一文教會你如何在npm上傳自己的包

    一文教會你如何在npm上傳自己的包

    作為一個前端開發(fā)者,我們要學(xué)會自己編寫一些開發(fā)工具模塊,也可以自己編寫一些組件,甚至可以通過自己的能力編寫一個框架出來,這都需要我們能夠靈活的管理我們的包,下面這篇文章主要給大家介紹了關(guān)于如何通過一文教會你在npm上傳自己的包的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Vue組件的實現(xiàn)原理詳細分析

    Vue組件的實現(xiàn)原理詳細分析

    在日常業(yè)務(wù)開發(fā)中我們會經(jīng)常封裝一些業(yè)務(wù)組件,下面這篇文章主要給大家介紹了關(guān)于Vue組件的實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • vue-cli中的webpack配置詳解

    vue-cli中的webpack配置詳解

    本篇文章主要介紹了vue-cli中的webpack配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Vue表單驗證?trigger:'blur'OR?trigger:'change'區(qū)別解析

    Vue表單驗證?trigger:'blur'OR?trigger:'change&ap

    利用?elementUI?實現(xiàn)表單元素校驗時,出現(xiàn)下拉框內(nèi)容選中后校驗不消失的異常校驗情形,這篇文章主要介紹了Vue表單驗證?trigger:‘blur‘?OR?trigger:‘change‘?區(qū)別,需要的朋友可以參考下
    2023-09-09
  • Vue.js?的計算屬性和偵聽器詳解(提升數(shù)據(jù)處理與交互的關(guān)鍵工具)

    Vue.js?的計算屬性和偵聽器詳解(提升數(shù)據(jù)處理與交互的關(guān)鍵工具)

    在Vue.js開發(fā)中,計算屬性與偵聽器是極為關(guān)鍵的特性,它們極大地提升了數(shù)據(jù)處理與交互邏輯實現(xiàn)的便捷性和高效性,本文給大家介紹Vue.js?的計算屬性和偵聽器:提升數(shù)據(jù)處理與交互的關(guān)鍵工具,感興趣的朋友一起看看吧
    2025-04-04
  • vue中路由跳轉(zhuǎn)的方式有哪些你知道嗎

    vue中路由跳轉(zhuǎn)的方式有哪些你知道嗎

    這篇文章主要為大家介紹了vue路由跳轉(zhuǎn)的方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論

汤阴县| 华宁县| 东丽区| 开阳县| 颍上县| 盘锦市| 杭州市| 电白县| 林芝县| 安新县| 义乌市| 马关县| 孟村| 镶黄旗| 新乡县| 大悟县| 宣汉县| 吐鲁番市| 沂水县| 厦门市| 双牌县| 佳木斯市| 山东省| 梁山县| 长泰县| 江北区| 个旧市| 乐亭县| 永仁县| 金乡县| 漳平市| 正宁县| 连南| 永州市| 濮阳县| 科技| 泉州市| 买车| 璧山县| 宁陵县| 惠安县|