vue之props數(shù)據(jù)傳遞(單向杉编,雙向sync)

學(xué)習(xí)vue必不可少的一個(gè)環(huán)節(jié)就是數(shù)據(jù)之間的傳遞,下面我們?cè)敿?xì)介紹下父組件如何向子組件傳遞數(shù)據(jù)的咆霜。

1組件實(shí)例的作用域

組件是孤立的王财,簡(jiǎn)單的來(lái)說(shuō),組件和組件之間裕便,即使有同名屬性绒净,值也不共享。案例如下:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">  
    <add></add>  
    <del></del>  
</div>  
</body>
</html>
<script>  
    var vm = new Vue({  
        el: '#app',  
        components: {  
            "add": {  
                template: "<button>btn:{{btn}}</button>",  
                data: function () {  
                    return {btn: "123"};  
                }  
            },  
            del: {  
                template: "<button>btn:{{btn}}</button>",  
                data: function () {  
                    return {btn: "456"};  
                }  
            }  
        }  
    });  
</script>   

渲染結(jié)果:

2個(gè)按鈕偿衰,第一個(gè)的值是123挂疆,第二個(gè)的值是456(雖然他們都是btn)

2使用props綁定靜態(tài)數(shù)據(jù)

(1)這種方法用于傳遞字符串,且值是寫在父組件自定義元素上的下翎。
(2)下面示例中的寫法缤言,不能傳遞父組件data屬性中的值
(3)會(huì)覆蓋模板的data屬性中,同名的值视事。
案例如下:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">  
    <add btn="h"></add>  
</div> 
</body>
</html> 
<script>  
    var vm = new Vue({  
        el: '#app',  
        data: {  
            h: "hello"  
        },  
        components: {  
            "add": {  
                props: ['btn'],  
                template: "<button>btn:{{btn}}</button>",  
                data: function () {  
                    return {btn: "123"};  
                }  
            }  
        }  
    });  
</script>   

渲染結(jié)果:

btn的值是h胆萧,即不是123也不是hello。

(4)駝峰寫法

假如插值是駝峰式的俐东,
而在html標(biāo)簽中跌穗,由于html的特性是不區(qū)分大小寫(比如LI和li是一樣的),因此虏辫,html標(biāo)簽中要傳遞的值要寫成短橫線式的(如btn-test)蚌吸,以區(qū)分大小寫。
而在props的數(shù)組中砌庄,應(yīng)該和插值保持一致羹唠,寫成駝峰式的(如btnTest)奕枢。

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
 <div id="app">  
    <add  btn-test="h"></add>  
</div>  
</body>
</html>
<script>  
    var vm = new Vue({  
        el: '#app',  
        data: {  
            h: "hello"  
        },  
        components: {  
            "add": {  
                props: ['btnTest'],  
                template: "<button>btn:{{btnTest}}</button>",  
                data: function () {  
                    return {btn: "123"};  
                }  
            }  
        }  
    });  
</script>   

渲染結(jié)果:

btn的值是h

3利用props綁定動(dòng)態(tài)數(shù)據(jù)

簡(jiǎn)單來(lái)說(shuō),就是讓子組件的某個(gè)插值佩微,和父組件的數(shù)據(jù)保持一致缝彬。
標(biāo)準(zhǔn)寫法是(利用v-bind):
(1)btn使用的父組件data中 h的值;
(2)子組件的data的函數(shù)中返回值被覆蓋了哺眯。
(3)也就是說(shuō)跌造,使用v-bind的是使用父組件的值(根據(jù)屬性名),沒有使用v-bind的是將標(biāo)簽里的數(shù)值當(dāng)做字符串來(lái)使用族购。
(4)依然需要使用props壳贪,否則他會(huì)取用自己data里的btn的值

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
 <div id="app">  
    <add v-bind:btn="h"></add>  
</div>  
</body>
</html>
<script>  
    var vm = new Vue({  
        el: '#app',  
        data: {  
            h: "hello"  
        },  
        components: {  
            "add": {  
                props: ['btn'],  
                template: "<button>btn:{{btn}}</button>",  
                data: function () {  
                    return {'btn': "123"};  //子組件同名的值被覆蓋了  
                }  
            }  
        }  
    });  
</script>   

props的綁定類型:

(1)單向綁定

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">  
    父組件:  
    <input v-model="val"><br/>  
    子組件:  
    <test v-bind:test-Val="val"></test>  
</div>  
</body>
</html>
<script>  
    var vm = new Vue({  
        el: '#app',  
        data: {  
            val: 1  
        },  
        components: {  
            "test": {  
                props: ['testVal'],  
                template: "<input v-model='testVal'/>"  
            }  
        }  
    });  
</script>   

說(shuō)明:
當(dāng)父組件的值被更改后,子組件的值也隨之更改寝杖;
當(dāng)子組件的值被更改后违施,父組件的值不會(huì)變化,而假如再次修改父組件的值瑟幕,子組件會(huì)再次同步磕蒲。
另外需要注意的是,子組件如果要同步綁定只盹,那么子組件的input需要是v-model辣往,而不能是value屬性(那樣只能單項(xiàng)綁定,且修改子組件的值后會(huì)失去綁定)

(2)雙向綁定:
需要使用“.sync”作為修飾詞
如示例:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">  
    父組件:  
    <input v-model="val"><br/>  
    子組件:  
    <test :test.sync="val"></test>  
</div>  
</body>
</html>
<script>  
    var vm = new Vue({  
        el: '#app',  
        data: {  
            val: 1  
        },  
        components: {  
            "test": {  
                props: ['test'],  
                template: '<div @click="increment">{{test}}</div>',
                methods: {
                  increment: function() {
                    this.$emit('update:test', ++this.test);
                  }
                }
            }  
        }  
    });  
</script>   
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殖卑,一起剝皮案震驚了整個(gè)濱河市站削,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孵稽,老刑警劉巖许起,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異菩鲜,居然都是意外死亡园细,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門接校,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猛频,“玉大人,你說(shuō)我怎么就攤上這事蛛勉÷寡埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵董习,是天一觀的道長(zhǎng)烈和。 經(jīng)常有香客問我,道長(zhǎng)皿淋,這世上最難降的妖魔是什么招刹? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮窝趣,結(jié)果婚禮上疯暑,老公的妹妹穿的比我還像新娘。我一直安慰自己哑舒,他們只是感情好妇拯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洗鸵,像睡著了一般越锈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膘滨,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天甘凭,我揣著相機(jī)與錄音,去河邊找鬼火邓。 笑死丹弱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铲咨。 我是一名探鬼主播躲胳,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纤勒!你這毒婦竟也來(lái)了坯苹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摇天,失蹤者是張志新(化名)和其女友劉穎北滥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闸翅,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡再芋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坚冀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片济赎。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖记某,靈堂內(nèi)的尸體忽然破棺而出司训,到底是詐尸還是另有隱情,我是刑警寧澤液南,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布壳猜,位于F島的核電站,受9級(jí)特大地震影響滑凉,放射性物質(zhì)發(fā)生泄漏统扳。R本人自食惡果不足惜喘帚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咒钟。 院中可真熱鬧吹由,春花似錦、人聲如沸朱嘴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萍嬉。三九已至乌昔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壤追,已是汗流浹背磕道。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留大诸,地道東北人捅厂。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像资柔,于是被迫代替她去往敵國(guó)和親焙贷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本篇資料來(lái)于官方文檔: http://cn.vuejs.org/guide/components.html#Pro...
    hope7th閱讀 4,305評(píng)論 4 1
  • vue概述 在官方文檔中贿堰,有一句話對(duì)Vue的定位說(shuō)的很明確:Vue.js 的核心是一個(gè)允許采用簡(jiǎn)潔的模板語(yǔ)法來(lái)聲明...
    li4065閱讀 7,216評(píng)論 0 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理辙芍,服務(wù)發(fā)現(xiàn),斷路器羹与,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 人們常說(shuō)故硅,生活是一本書。是的纵搁,它是一本故事書吃衅。在這個(gè)故事里,你會(huì)遇到各種各樣的人腾誉,這些人會(huì)組成一個(gè)個(gè)不同的篇...
    盧英俊閱讀 493評(píng)論 0 0
  • 晴夕呀閱讀 77評(píng)論 0 0