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

Vue組件選項props實例詳解

 更新時間:2017年08月18日 15:49:25   作者:小火柴的藍色理想  
父組件通過 props 向下傳遞數(shù)據給子組件,子組件通過 events 給父組件發(fā)送消息。本文將詳細介紹Vue組件選項props,需要的朋友可以參考下

前面的話

  組件接受的選項大部分與Vue實例一樣,而選項props是組件中非常重要的一個選項。在 Vue 中,父子組件的關系可以總結為 props down, events up。父組件通過 props 向下傳遞數(shù)據給子組件,子組件通過 events 給父組件發(fā)送消息。本文將詳細介紹Vue組件選項props

靜態(tài)props

  組件實例的作用域是孤立的。這意味著不能 (也不應該) 在子組件的模板內直接引用父組件的數(shù)據。要讓子組件使用父組件的數(shù)據,需要通過子組件的 props 選項

  使用Prop傳遞數(shù)據包括靜態(tài)和動態(tài)兩種形式,下面先介紹靜態(tài)props

  子組件要顯式地用 props 選項聲明它期待獲得的數(shù)據

var childNode = {
 template: '<div>{{message}}</div>',
 props:['message']
}

  靜態(tài)Prop通過為子組件在父組件中的占位符添加特性的方式來達到傳值的目的

<div id="example">
 <parent></parent>
</div>
<script>
var childNode = {
 template: '<div>{{message}}</div>',
 props:['message']
}
var parentNode = {
 template: `
 <div class="parent">
 <child message="aaa"></child>
 <child message="bbb"></child>
 </div>`,
 components: {
 'child': childNode
 }
};
// 創(chuàng)建根實例
new Vue({
 el: '#example',
 components: {
 'parent': parentNode
 }
})
</script>

命名約定

  對于props聲明的屬性來說,在父級HTML模板中,屬性名需要使用中劃線寫法

var parentNode = {
 template: `
 <div class="parent">
 <child my-message="aaa"></child>
 <child my-message="bbb"></child>
 </div>`,
 components: {
 'child': childNode
 }
};

  子級props屬性聲明時,使用小駝峰或者中劃線寫法都可以;而子級模板使用從父級傳來的變量時,需要使用對應的小駝峰寫法

var childNode = {
 template: '<div>{{myMessage}}</div>',
 props:['myMessage']
}
var childNode = {
 template: '<div>{{myMessage}}</div>',
 props:['my-message']
}

動態(tài)props

  在模板中,要動態(tài)地綁定父組件的數(shù)據到子模板的 props,與綁定到任何普通的HTML特性相類似,就是用 v-bind。每當父組件的數(shù)據變化時,該變化也會傳導給子組件

var childNode = {
 template: '<div>{{myMessage}}</div>',
 props:['myMessage']
}
var parentNode = {
 template: `
 <div class="parent">
 <child :my-message="data1"></child>
 <child :my-message="data2"></child>
 </div>`,
 components: {
 'child': childNode
 },
 data(){
 return {
 'data1':'aaa',
 'data2':'bbb'
 }
 }
};

傳遞數(shù)字

  初學者常犯的一個錯誤是使用字面量語法傳遞數(shù)值

<!-- 傳遞了一個字符串 "1" -->
<comp some-prop="1"></comp>
<div id="example">
 <my-parent></my-parent>
</div>
<script>
var childNode = {
 template: '<div>{{myMessage}}的類型是{{type}}</div>',
 props:['myMessage'],
 computed:{
 type(){
 return typeof this.myMessage
 }
 }
}
var parentNode = {
 template: `
 <div class="parent">
 <my-child my-message="1"></my-child>
 </div>`,
 components: {
 'myChild': childNode
 }
};
// 創(chuàng)建根實例
new Vue({
 el: '#example',
 components: {
 'MyParent': parentNode
 }
})
</script>

  因為它是一個字面 prop,它的值是字符串 "1" 而不是 number。如果想傳遞一個實際的 number,需要使用 v-bind,從而讓它的值被當作JS表達式計算

<!-- 傳遞實際的 number -->
<comp v-bind:some-prop="1"></comp>
var parentNode = {
 template: `
 <div class="parent">
 <my-child :my-message="1"></my-child>
 </div>`,
 components: {
 'myChild': childNode
 }
};

  或者可以使用動態(tài)props,在data屬性中設置對應的數(shù)字1

var parentNode = {
 template: `
 <div class="parent">
 <my-child :my-message="data"></my-child>
 </div>`,
 components: {
 'myChild': childNode
 },
 data(){
 return {
 'data': 1
 }
 }
};

props驗證

  可以為組件的 props 指定驗證規(guī)格。如果傳入的數(shù)據不符合規(guī)格,Vue會發(fā)出警告。當組件給其他人使用時,這很有用

  要指定驗證規(guī)格,需要用對象的形式,而不能用字符串數(shù)組

Vue.component('example', {
 props: {
 // 基礎類型檢測 (`null` 意思是任何類型都可以)
 propA: Number,
 // 多種類型
 propB: [String, Number],
 // 必傳且是字符串
 propC: {
 type: String,
 required: true
 },
 // 數(shù)字,有默認值
 propD: {
 type: Number,
 default: 100
 },
 // 數(shù)組/對象的默認值應當由一個工廠函數(shù)返回
 propE: {
 type: Object,
 default: function () {
 return { message: 'hello' }
 }
 },
 // 自定義驗證函數(shù)
 propF: {
 validator: function (value) {
 return value > 10
 }
 }
 }
})

  type 可以是下面原生構造器

String
Number
Boolean
Function
Object
Array
Symbol

  type 也可以是一個自定義構造器函數(shù),使用 instanceof 檢測。

  當 prop 驗證失敗,Vue 會在拋出警告 (如果使用的是開發(fā)版本)。props會在組件實例創(chuàng)建之前進行校驗,所以在 default 或 validator 函數(shù)里,諸如 data、computed 或 methods 等實例屬性還無法使用

  下面是一個簡單例子,如果傳入子組件的message不是數(shù)字,則拋出警告

<div id="example">
 <parent></parent>
</div>
<script>
var childNode = {
 template: '<div>{{message}}</div>',
 props:{
 'message':Number
 }
}
var parentNode = {
 template: `
 <div class="parent">
 <child :message="msg"></child>
 </div>`,
 components: {
 'child': childNode
 },
 data(){
 return{
 msg: '123'
 }
 }
};
// 創(chuàng)建根實例
new Vue({
 el: '#example',
 components: {
 'parent': parentNode
 }
})
</script>

  傳入數(shù)字123時,則無警告提示。傳入字符串'123'時,結果如下所示

  將上面代碼中,子組件的內容修改如下,可自定義驗證函數(shù),當函數(shù)返回為false時,則輸出警告提示

var childNode = {
 template: '<div>{{message}}</div>',
 props:{
 'message':{
 validator: function (value) {
 return value > 10
 }
 }
 }
}

  在父組件中傳入msg值為1,由于小于10,則輸出警告提示

var parentNode = {
 template: `
 <div class="parent">
 <child :message="msg"></child>
 </div>`,
 components: {
 'child': childNode
 },
 data(){
 return{
 msg:1
 }
 }
};

單向數(shù)據流

  prop 是單向綁定的:當父組件的屬性變化時,將傳導給子組件,但是不會反過來。這是為了防止子組件無意修改了父組件的狀態(tài)——這會讓應用的數(shù)據流難以理解

  另外,每次父組件更新時,子組件的所有 prop 都會更新為最新值。這意味著不應該在子組件內部改變 prop。如果這么做了,Vue 會在控制臺給出警告

  下面是一個典型例子

<div id="example">
 <parent></parent>
</div>
<script>
var childNode = {
 template: `
 <div class="child">
 <div>
 <span>子組件數(shù)據</span>
 <input v-model="childMsg">
 </div>
 <p>{{childMsg}}</p>
 </div>
 `,
 props:['childMsg']
}
var parentNode = {
 template: `
 <div class="parent">
 <div>
 <span>父組件數(shù)據</span>
 <input v-model="msg">
 </div>
 <p>{{msg}}</p>
 <child :child-msg="msg"></child>
 </div>
 `,
 components: {
 'child': childNode
 },
 data(){
 return {
 'msg':'match'
 }
 }
};
// 創(chuàng)建根實例
new Vue({
 el: '#example',
 components: {
 'parent': parentNode
 }
})
</script>

  父組件數(shù)據變化時,子組件數(shù)據會相應變化;而子組件數(shù)據變化時,父組件數(shù)據不變,并在控制臺顯示警告

  修改prop中的數(shù)據,通常有以下兩種原因

  1、prop 作為初始值傳入后,子組件想把它當作局部數(shù)據來用

  2、prop 作為初始值傳入,由子組件處理成其它數(shù)據輸出

  對于這兩種情況,正確的應對方式是

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

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

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

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

  [注意]JS中對象和數(shù)組是引用類型,指向同一個內存空間,如果 prop 是一個對象或數(shù)組,在子組件內部改變它會影響父組件的狀態(tài)

總結

以上所述是小編給大家介紹的Vue組件選項props實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • 深入詳解Vue3 ref底層實現(xiàn)原理

    深入詳解Vue3 ref底層實現(xiàn)原理

    隨著現(xiàn)在vue3越來越普及,相應的面試題也多了起來。說到vue3的面試題,有一個最經典的就是對于實現(xiàn)ref和reactive這兩個方法的底層原理,本文就來和大家簡單講講吧
    2023-04-04
  • Vue OptionsAPI與CompositionAPI的區(qū)別與使用介紹

    Vue OptionsAPI與CompositionAPI的區(qū)別與使用介紹

    OptionsAPI和CompositionAPI是Vue.js框架中兩種不同的組件編寫方式,OptionsAPI通過對象字面量定義組件,以屬性分隔不同功能,響應式數(shù)據通過data屬性定義,本文給大家介紹Vue OptionsAPI與CompositionAPI的區(qū)別,感興趣的朋友一起看看吧
    2024-10-10
  • ant-design-vue導航菜單a-menu的使用解讀

    ant-design-vue導航菜單a-menu的使用解讀

    這篇文章主要介紹了ant-design-vue導航菜單a-menu的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue響應式原理及雙向數(shù)據綁定示例分析

    Vue響應式原理及雙向數(shù)據綁定示例分析

    這篇文章主要為大家介紹了Vue響應式原理及雙向數(shù)據綁定的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • vue之el-menu-item如何更改導航菜單欄選中的背景顏色

    vue之el-menu-item如何更改導航菜單欄選中的背景顏色

    這篇文章主要介紹了vue之el-menu-item如何更改導航菜單欄選中的背景顏色問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue中cookies的使用方式

    vue中cookies的使用方式

    這篇文章主要介紹了vue中cookies的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 安裝vue無法運行、此系統(tǒng)無法運行腳本問題及解決

    安裝vue無法運行、此系統(tǒng)無法運行腳本問題及解決

    這篇文章主要介紹了安裝vue無法運行、此系統(tǒng)無法運行腳本問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue3實現(xiàn)動態(tài)路由與手動導航

    Vue3實現(xiàn)動態(tài)路由與手動導航

    這篇文章主要為大家詳細介紹了如何在?Vue?3?中實現(xiàn)動態(tài)路由注冊和手動導航,確保用戶訪問的頁面與權限對應,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • Vue3中的h函數(shù)及使用小結

    Vue3中的h函數(shù)及使用小結

    這篇文章主要介紹了Vue3中的h函數(shù)及使用小結,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Vue雙向數(shù)據綁定與響應式原理深入探究

    Vue雙向數(shù)據綁定與響應式原理深入探究

    本節(jié)介紹雙向數(shù)據綁定以及響應式的原理,回答了雙向數(shù)據綁定和數(shù)據響應式是否相同,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-08-08

最新評論

怀宁县| 阿勒泰市| 崇义县| 嵩明县| 当涂县| 岳西县| 太湖县| 栾城县| 苏尼特右旗| 浏阳市| 布拖县| 平罗县| 墨江| 高陵县| 宜兰县| 屏东县| 射洪县| 靖安县| 大埔区| 墨江| 黄石市| 株洲市| 文安县| 临桂县| 无极县| 鹰潭市| 霸州市| 保山市| 河曲县| 西乌| 北流市| 商丘市| 呼伦贝尔市| 林州市| 鞍山市| 南华县| 虞城县| 北碚区| 车险| 天峨县| 乐都县|