中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

vue2.X組件學習心得(新手必看篇)

發布時間:2020-09-21 16:14:59 來源:腳本之家 閱讀:150 作者:jingxian 欄目:web開發

VUEJS學習網址:https://cn.vuejs.org/

此文章是用來記錄自己的學習和實踐心得。

關注點:父子組件之間的通信

看圖說話:

vue2.X組件學習心得(新手必看篇)

Pass Props

子組件本身與父組件是孤立的,通過子組件中顯示聲明的props屬性,接收父組件數據;

父組件的數據更新時,子組件的prop會跟著更新;

此數據流動是單向的(看著);

Emit Events

子組件使用$.emit(fn)向外拋出自己的內部觸發的事件;

父組件是否監聽?如果父組件需要監聽,使用v-on綁定監聽,觸發對應事件;

以上為通用語,具體分析

子組件可以接收一個字符串,在子組件內部可以用{{label}}使用 

<v-input label="姓名"></v-input>

子組件可以接收動態參數

<input v-model="msg" />
<v-profile :message="msg"></v-profile>

子組件接收到數據之后想處理一下不小心改了怎么辦?

給prop創建一個副本(建議深拷貝),處理副本,不動prop;

父組件的數據改變后,子組件的prop會自動更新,但是這個prop的副本不會啊?

使用watch監聽這個prop,改變時更新副本;

子組件的prop副本改變了想要通知父組件怎么辦?

使用watch監聽這個副本,改變時向外拋出自己的內部觸發的事件;
。。。

其實以上???在2.3有了更好的方法,之前的就是看看。

.sync修飾符

***父組件***
<input v-model="msg" />
<v-profile :message.sync="msg"></v-profile>
***子組件***
$.emit('update:message',newValue)

我是用了一下然后喜聞樂見的修改成功了,但是打開控制臺有報錯!!!

vue.esm.js?65d7:434 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "message"

子組件想要觸發父組件可以emit(父組件需要監聽才會觸發),父組件觸發子組件事件呢?

通過在引用的子組件上使用ref屬性實現父組件調用子組件的方法以及屬性

但是!$refs 只在組件渲染完成后才填充,并且它是非響應式的。它僅僅作為一個直接訪問子組件的應急方案——應當避免在模版或計算屬性中使用 $refs 。

關注點:非父子組件之間的通信

使用空的vue實例作為中央事件總線

var bus = new Vue();
// 觸發組件 A 中的事件
bus.$emit('id-selected', 1)


// 在組件 B 創建的鉤子中監聽事件
bus.$on('id-selected', function (id) {
 // ...
})

考慮vuex

關注點:在組件中使用slot

首先,在父組件中給子組件標簽中間放置內容是無效的。然后slot出場。

白話版本:

匿名slot:
  slot標簽存在與子組件template中;
  子組件在父組件中使用的時候,子組件標簽中的結構會在編譯后替換子組件的slot標簽;
  如果子組件中沒有slot,則父組件中子組件標簽中的內容會消失;
具名slot:
  顧名思義,是具有name屬性的slot標簽;并有匿名組件的特性(以上);
  子組件在父組件中使用的時候,子組件中的結構中會有某些標簽擁有slot屬性并賦值,這些會在編譯后替換子組件的相應slot標簽;

一句話解釋:主要的內容是寫在父組件中的子組件標簽中,編譯后插入子組件的相應位置

講真,說到這里我自己都不明白要slot干嘛。

官方講解入口

官方給了個布局的例子:

<div class="container">
 <header>
  <slot name="header"></slot>
 </header>
 <main>
  <slot></slot>
 </main>
 <footer>
  <slot name="footer"></slot>
 </footer>
</div>
<app-layout>
 <h2 slot="header">這里可能是一個頁面標題</h2>
 <p>主要內容的一個段落。</p>
 <p>另一個主要段落。</p>
 <p slot="footer">這里有一些聯系信息</p>
</app-layout>

但是好像也沒什么好推薦的。(個人看法)

再想想:

子組件的template中至少有一個slot標簽,slot標簽中的內容是default content。什么場景能用到呢?我想到了剛剛寫的表格數據篩選,當時用的是v-if,v-else。如果改成slot呢。。。

作用域插槽

語法:

<template scope="props">
  ...
</template>

——————這個官網例子我是好半天才明白

<my-awesome-list :items="items">
 <!-- 作用域插槽也可以是具名的 -->
 <template slot="item" scope="props">
  <li class="my-fancy-item">{{ props.text }}</li>
 </template>
</my-awesome-list>

以上的template中的props其實和子組件的props屬性是相同的,子組件傳遞了什么prop,它就接收什么,像是下邊的傳了個text

<ul>
 <slot name="item"
  v-for="item in items"
  :text="item.text">
  <!-- 這里寫入備用內容 -->
 </slot>
</ul>

我看了很長很長時間,為什么要這么拐個彎呢。。。

————一夜過后—————

這樣內容更靈活:數據是相同的(父組件提供數據),子組件負責了循環(添加邏輯),父組件引用子組件時插入的作用域插槽的模板決定了(展示的形式)!這分工!!!點個贊!!!

我修改了一下自己的table然后頁面展示了個空白。之后發現問題出在子組件往外傳數據的時候變量名不能用"name"。修改掉。

關注點:動態組件使用

通過使用保留的 <component> 元素,動態地綁定到它的 is 特性,我們讓多個組件可以使用同一個掛載點,并動態切換:很適用于制作Tab類的效果

<component v-bind:is="currentView" :data1="data1" :data2="data2">
 <!-- 組件在 vm.currentview 變化時改變! -->
</component>

在methods屬性中定義一個函數修改currentView即可。

視情況可以配合 keep-alive 避免重新渲染

在子組件上放置activate鉤子做切換時的工作:done() //放到鉤子最后,表示執行工作完畢,可以切換組件,配合keep-alive使用,activate鉤子只執行一次

子組件接收數據和以往相同,只是這一次都寫在了component中,只是如此的話,每個子組件都需要有這些接口(prop)
暫時說到這里,突然得回頭看一下react,沒時間了,回頭會繼續。

以上這篇vue2.X組件學習心得(新手必看篇)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

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

AI

濮阳市| 阳泉市| 太仓市| 湾仔区| 乌兰察布市| 修文县| 鄯善县| 吉隆县| 曲靖市| 邵武市| 桦川县| 新闻| 桑植县| 南昌县| 布尔津县| 芒康县| 侯马市| 沐川县| 古交市| 武冈市| 赤城县| 松溪县| 南岸区| 西盟| 肥西县| 凌云县| 南木林县| 齐齐哈尔市| 曲靖市| 隆子县| 盐亭县| 新龙县| 沙坪坝区| 东方市| 天峨县| 海丰县| 牟定县| 湖北省| 南康市| 五台县| 大英县|