91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Vue組件實現tips的總結

發布時間:2020-09-24 21:33:04 來源:腳本之家 閱讀:285 作者:wenzi 欄目:web開發

官網上已經有的內容,我就不再贅述了,直接在官網上查看即可,這里蚊子想換個角度來講解下vue的組件。

組件,顧名思義,就是把一個相對獨立,而且會多次使用的功能抽象出來,成為一個組件!如果我們要把某個功能抽象為一個組件時,要做到這個組件對其他人來說是個黑盒子,他們不用關心里面是怎么實現的,只需要根據約定的接口調用即可!

我用一張圖稍微總結了下Vue中組件的構成:

詳解Vue組件實現tips的總結

可以看到組件中包含的東西還是蠻多的,而且,還有很多的點沒有列出來,這里面的每一個知識點能都展開講很多。不過我們這里不講原理,只講使用。

我們以一個tips彈窗為例,來綜合運用下組件的知識點。tips彈窗,幾乎所有的框架或者類庫,都會有彈窗這個組件,因為彈窗這個功能平時非常普遍,而且模塊解耦度高!

1. 接口約定

我們這里實現的彈窗,能用到的知識點有:props, event, slot, ref等。這里我們也能看到各個知識點是怎么運用的。

/**
 * modal 模態接口參數
 * @param {string} modal.title 模態框標題
 * @param {string} modal.text 模態框內容
 * @param {boolean} modal.showbtn 是否顯示按鈕
 * @param {string} modal.btnText 按鈕文字
 */

 Vue.component('tips', {
  props : ['tipsOptions'],
  template : '#tips',

  data(){
    return{
      show : false
    }
  },

  computed:{
    tips : {
      get() {
        let tips = this.tipsOptions || {};
        tips = {
          title: tips.title || '提示',
          text: tips.text || '',
          showbtn : tips.showbtn || true,
          btnText : tips.btnText || '確定'
        };
        // console.log(tips);
        return tips;
      }
    }
  }
})

2. modal組件的實現

tips組件相對來說實現的比較簡單,僅用作提示用戶的簡單彈層。

模板:

<div class="tips" v-show="show" transition="fade">
  <div class="tips-close" @click="closeTips">x</div>
  <div class="tips-header">
    <slot name="header">
      <p class="title">{{tips.title}}</p>
    </slot>
  </div>
  <div class="tips-body">
    <slot name="body">
      <p class="notice">{{tips.text}}</p>
    </slot>
  </div>
  <div class="tips-footer">
    <a href="javascript:;" rel="external nofollow" rel="external nofollow" v-if="tips.showbtn" @click="yes" >{{tips.btnText}}</a>
  </div>
</div>

模板中將結構分成了三部分,標題、內容和操作區域。這里既可以使用props傳遞字符串,也可以使用slot進行定制。

tips樣式:

.tips {
  position: fixed;
  left: 10px;
  bottom: 10px;
  z-index: 1001;
  -webkit-overflow-scrolling: touch;
  max-width: 690px;
  width: 260px;
  padding: 10px;
  background: #fff;
  box-shadow: 0 0 10px #888;
  border-radius: 4px;
}
.tips-close{
  position: absolute;
  top: 0;
  right: 0;
  width: 20px;
  height: 20px;
  line-height: 20px;
  text-align: center;
}
.tips-header{
  text-align: center;
  font-size: 25px;
}

組件內的方法:

methods:{
  closeTips(){
    this.show = false;
  },

  yes : function(){
    this.show = false;
    this.$emit('yes', {name:'wenzi', age:36}); // 觸發yes事件
  },

  showTips(){
    var self = this;
    self.show = true;

    setTimeout(function(){
      // self.show = false;
    }, 2000)
  }
}

3. 調用tips組件

首先我們開始渲染組件:

<div class="app">
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="showtips">顯示</a>
  <tips :tips-options="tipsOptions" ref="dialog" @yes="yes" v-cloak >
    <h4 slot="header">提示標題</h4>
    <div slot="body">
      <p>hello world</p>
      <p>wenzi</p>
    </div>
  </tips>
</div>

點擊顯示按鈕后展示tips:

var app = new Vue({
  el : '.app',

  data : {
    tipsOptions : {
      title : 'tip'
    }
  }

  methods:{
    // 監聽從組件內傳遞出來的事件
    yes(args){
      // console.log( args );
      alert( JSON.stringify(args) );
    },

    // 顯示tips
    showtips(){
      // console.log( this.$refs );
      this.$refs.dialog.showTips();
    }
  }
})

4. 總結

在這個簡單的tips組件里,我們實現了用props傳遞參數,用$emit向外傳遞參數,用slot插槽來定制內容。

需要注意的是:組件props是單向綁定,即父組件的屬性發生變化時,子組件能接收到相應的數據變化,但是反過來就會出錯。即不能在子組件中修改props傳過來的數據,來達到修改父組件屬性的目的。這是為了防止子組件無意修改了父組件的狀態。

另外,每次父組件更新時,子組件的所有 prop 都會更新為最新值。這意味著你不應該在子組件內部改變 prop。如果你這么做了,Vue 會在控制臺給出警告。如果真的需要在子組件里進行修改,可以用這兩種方法應對:

定義一個局部變量,并用 prop 的值初始化它:

props: ['initialCounter'],
data: function () {
 return { counter: this.initialCounter }
}

定義一個計算屬性,處理 prop 的值并返回。

props: ['size'],
computed: {
 normalizedSize: function () {
  return this.size.trim().toLowerCase()
 }
}

當然,這只是單頁面中組件的實現,更復雜的組件后續我們也會實現。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮阳县| 江阴市| 太白县| 麻栗坡县| 许昌县| 保山市| 夹江县| 咸阳市| 景宁| 丰台区| 阳高县| 泰兴市| 天津市| 张掖市| 紫金县| 昌乐县| 永修县| 星子县| 开封县| 华宁县| 平谷区| 乡宁县| 日喀则市| 宁津县| 新津县| 乳源| 巴彦淖尔市| 德庆县| 边坝县| 苍溪县| 兴仁县| 渭南市| 华坪县| 赣州市| 神池县| 林甸县| 故城县| 汉中市| 江津市| 镇平县| 长春市|