Vue之prop

這里暫時僅介紹下“非prop特性(attr)”
一般的特性是顯式定義的(即 prop特性)吱抚,如下面代碼中的 post 逝钥,用于從外部(一般是父組件)向該組件傳入數(shù)據(jù)。不過寫子組件的人并不可能提前預見該組件會被如何使用愈涩,也就不知道該組件會被傳入哪些特性蚌本。為了提高組件的可用性,組件可以接受任意的特性羞芍,那些未在組件中顯式定義的非prop特性哗戈,會被添加到這個組件的根元素 $attrs上,如第二段代碼和圖片所示:注意 組件中顯式定義的props特性 post 和 組件中未提前定義的非props特性 non-prop 從父組件傳入后荷科,在組件內部存儲的位置唯咬。

 Vue.component('blog-post',{
        data:function () {
            return {
                inputText:'waiting for input...'
            }
        },
        props:{
            post:Object
        },
       ...
);

let vm=new Vue({
        el:"#posts-demo",
        data:{
            posts:[
                {   id:1,
                    title:'title1',
                    content:'<p>content1</p>'},
                {   id:2,
                    title:'title2',
                    content:'<p>content2</p>'}
            ],
            // 用來傳給blog-post組件的非prop特性(即blog-post組件并未顯式定義該prop特性)
            nonProp:'一個非prop特性的值'
        }, })
 <blog-post v-for="post in posts"
                   :post="post"
                   :non-prop="nonProp"
        >
</blog-post>
組件blog-post內部

組件blog-post經過渲染呈現(xiàn)在頁面上畏浆,非prop特性會被作為普通的html元素的屬性胆胰,如下圖所示。


image.png

在Vue2.4.0刻获,可以在組件的定義中設置 inheritAttrs: false 蜀涨,這樣渲染組件的時候就不會將非prop特性處理為普通的html元素的屬性,而通過該組件的 $attrs還是可以獲取到非prop特性蝎毡。如下:

  Vue.component('blog-post',{
        props:{
            post:Object
        },
        inheritAttrs:false,
        ...
}
image.png

有時候會有這樣的場景厚柳,組件 blog-post 接收了其父組件傳入的非prop 特性 non-prop,此特性在組件 blog-post 并不會被直接使用沐兵,而是要在組件 blog-post 的子組件 custom-input 中使用别垮,那么可以在組件 blog-post 中借助 $attrs 來將其傳給子組件。這也算是從祖父組件A經過子組件B向孫子組件C傳遞數(shù)據(jù)的一個方法吧扎谎。

 Vue.component('blog-post',{
        data: ...,
        props:{
            post:Object
        },
        template:`
            <div class="blog-post">
                ...
                <custom-input           
                  v-model="inputText" 
                  :passData="$attrs"
                >
                </custom-input>
               ...
            </div>
        `,
        ...
image.png

不過上面的寫法 :passData="$attrs" 碳想,造成了在組件custom-input 中使用的時候還要 $attrs.passData.non-prop,不夠直接毁靶,推薦這樣寫 v-bind="$attrs"胧奔,效果如圖:


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市预吆,隨后出現(xiàn)的幾起案子龙填,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩遗,死亡現(xiàn)場離奇詭異胶背,居然都是意外死亡,警方通過查閱死者的電腦和手機喘先,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廷粒,“玉大人窘拯,你說我怎么就攤上這事“泳ィ” “怎么了涤姊?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嗤放。 經常有香客問我思喊,道長,這世上最難降的妖魔是什么次酌? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任恨课,我火速辦了婚禮,結果婚禮上岳服,老公的妹妹穿的比我還像新娘剂公。我一直安慰自己,他們只是感情好吊宋,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布纲辽。 她就那樣靜靜地躺著,像睡著了一般璃搜。 火紅的嫁衣襯著肌膚如雪拖吼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天这吻,我揣著相機與錄音吊档,去河邊找鬼。 笑死橘原,一個胖子當著我的面吹牛籍铁,可吹牛的內容都是我干的。 我是一名探鬼主播趾断,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拒名,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芋酌?” 一聲冷哼從身側響起增显,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后同云,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糖权,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年炸站,在試婚紗的時候發(fā)現(xiàn)自己被綠了星澳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡旱易,死狀恐怖禁偎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情阀坏,我是刑警寧澤如暖,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站忌堂,受9級特大地震影響盒至,放射性物質發(fā)生泄漏。R本人自食惡果不足惜士修,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一枷遂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棋嘲,春花似錦登淘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阔籽,卻和暖如春流妻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笆制。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工绅这, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人在辆。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓证薇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匆篓。 傳聞我的和親對象是個殘疾皇子浑度,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 組件注冊 組件名 在注冊一個組件的時候,我們始終需要給它一個名字鸦概。 該組件名就是Vue.component的第一個...
    oWSQo閱讀 399評論 0 1
  • 什么是組件箩张? 組件 (Component) 是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝...
    youins閱讀 9,480評論 0 13
  • 什么是組件 組件(Component)是 Vue.js 最強大的功能之一先慷。組件可以擴展 HTML 元素饮笛,封裝可重用...
    angelwgh閱讀 784評論 0 0
  • 一、什么是組件(Component)论熙? 組件(Component)是Vue.js最強大的功能之一福青。組件可以擴展HT...
    廖馬兒閱讀 24,283評論 1 4
  • " 我會喜歡慢一點的關系 " “越來越發(fā)現(xiàn)現(xiàn)代人的感情都太著急了∨Ч睿看一眼照片素跺,聽一段語音,說兩天晚安誉券,就喜歡上了。...
    哈二狗與海鷗閱讀 1,077評論 0 0