組件

一信粮、作用

提高代碼的復(fù)用性

二燥滑、注冊

1?全局注冊

Vue.component('my-component',{
    template: '<div>我是組件內(nèi)容</div>'
})

優(yōu)點(diǎn): 所有vue實(shí)例都可以使用

缺點(diǎn): 權(quán)取太大谜悟,容錯率降低

2?局部注冊

var app = new Vue({
    el: '#app',
    components:{//切記component后邊要加s
        'my-component':{
            template:'<div>我是局部注冊的一個組件</div>'
        }
    }
}}

3? vue 組件模板受html限制

在某些情況下會受到html標(biāo)簽的限制

比如直接在table中使用組件是無效的沛厨,可以使用 is屬性來掛載組件

//html
<div id="app">
  <my-component>我是組件內(nèi)容</my-component>
  
  <table>
     <my-component>我是組件內(nèi)容</my-component>
  </table>
  // 無效是因?yàn)閠able 中 只能有 tr,td,tbody這些元素觉阅,改成用is屬性即可
  
  <table>
    <tbody is="my-component"></tbody>
  </table>
  
</div>

//js
...
Vue.component('my-component',{
    template:'<div>我是組件內(nèi)容</div>'
})

var app = new Vue({
    el: '#app'
}

三祭芦、技巧

1?必須用小寫字母命名(child孔厉、mycomponent 命名組件)

2?template 中的內(nèi)容必須是被一個DOM 元素包括墓律,也可以嵌套

3?在組件定義中蒂窒,除了template外躁倒,其他選項也可以用(data赎婚、computed、methods)

4?data 必須是一個方法

// html
<div id="app">
 <btn-component></btn-component>
<div>

//js
...
components:{
  'btn-component':{
      template: '<button @click="count++">{{count}}</button>',
      data:function(){ //切記data必須是一個方法
          return{ //每次return 返回的是不同的 data對象
                  count:0
          }
       }
    }
 }
  

【Demo實(shí)例 https://jsbin.com/fucotab/edit?html,output

四樱溉、props傳遞數(shù)據(jù) 父傳子

1?在組件中使用props 從父組件接收參數(shù)挣输,注:在props中定義的屬性,都可在組件中直接使用

2?props 來自 父級的數(shù)據(jù) 福贞,而組件中data return的數(shù)據(jù)是組件自已的數(shù)據(jù)撩嚼,兩種情況作用域就是組件本身,可在template挖帘、computed完丽、methods中直接使用

//html
<div id="app">
    <h5>我是父組件</h5>//1?父組件通過msg給子組件傳遞消息:在子組件subcomponent上寫上msg 等于一個內(nèi)容
    <subcomponent msg="我是父組件傳遞的內(nèi)容"></subcomponent>
</div> //2?子組件要用到父組件傳過來的消息

//js
...
components:{
    subcomponent:{
        props: ['msg'], //數(shù)據(jù)來自父組件 2.1 props定義msg (以字符串?dāng)?shù)組形式)
        template:'<div>{{msg}}</div>' // 2.2 模板 template 就可以直接用了
    }     
}   


3?props的值有兩種: 一種是字符串?dāng)?shù)組(上述小例子就是),另一種是對象

4?可以用v-bind動態(tài)綁定父組件來的內(nèi)容

//html
....
<subcomponent msg="我是來自父組件的內(nèi)容"></subcomponent>
<input type="text" v-model="parentMsg"> // 1?input v-model綁定的數(shù)據(jù)是父組件data 中的數(shù)據(jù)
{{ parentMsg}} 
//2?把綁定的數(shù)據(jù)同時傳遞給子組件: 通過v-bind綁定屬性msg,把屬性msg用props進(jìn)行接收
<bindcomponent v-bind:msg="parentMsg"></bindcomponent>

//js
...
data:{
  parentMsg: '開始啦'      
}
components:{
    'bindcomponent':{
        props: ['msg'],
        template: '<div>{{msg}}</div>'//3?就可以在template中直接使用
    }     
}

【Demo實(shí)例 https://jsbin.com/jodaxer/1/edit?html,output

參考 https://cn.vuejs.org/v2/guide/components-props.html

五拇舀、單向數(shù)據(jù)流props使用場景

1? 第一種:

? a逻族、父組件:傳遞初始值

? b、子組件:將它作為初始值保存起來骄崩,在自已的作用域下聘鳞,可隨意使用或修改

? 這種情況,可以在組件 data 內(nèi)再聲明一個數(shù)據(jù)要拂,引用父組件的 props

//html  
<div id="app"> //2.1 將父組件的數(shù)據(jù)傳遞進(jìn)來
   <my-component msg="父組件傳遞的消息"></my-component>
</div>

//js
var app = new Vue({
   el: '#app',
   components:{ // 1抠璃、注冊組件
       'my-component':{
           props: ['msg'],//2.2 在子組件中用props接收數(shù)據(jù)
           template: '<div>{{count}}</div>',
           data:function(){
             return{ //將傳遞進(jìn)來的數(shù)據(jù)用初始值保存起來
               count: this.msg//props中的值可以通過this.xxx直接來進(jìn)行獲取
             } 
           }
       }
   }
})
   
分三步曲完成:
1? 注冊組件
2、將父組件的數(shù)據(jù)傳遞進(jìn)來脱惰,并在子組件中用props接收
3搏嗡、將傳遞進(jìn)來的數(shù)據(jù)通過初始值保存起來

2? 第二種

props 作為需要被轉(zhuǎn)變的原始值傳入,這種情況 用 計算屬性 就可以

//html
<div id="app">
 <input type="text" v-model="width">
 <my-component :width="width"></my-component>//2.1 將父組件的數(shù)據(jù)傳遞進(jìn)來
</div>

//js
var app = new Vue({
    el: '#app',
    data:{
        width: 0
    },
    components:{//1拉一、注冊組件
        'my-component':{
            props: ['width'],//2.2 在子組件中用props接收數(shù)據(jù)
            template:'<div :style="style"></div>',
            computed:{//3?將傳遞進(jìn)來的數(shù)據(jù)采盒,通過計算屬性重新計算工
                style:function(){
                    return{
                        width: this.width+'px',
                        background:'green',
                        height:'20px'
                    }
                }
            }
        }
    }
})

分三步曲完成:
1?注冊組件
2?將父組件的數(shù)據(jù)傳遞進(jìn)來,并在子組件中用props接收
3?將傳遞進(jìn)來的數(shù)據(jù)蔚润,通過計算屬性重新計算工
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磅氨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抽碌,更是在濱河造成了極大的恐慌悍赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件货徙,死亡現(xiàn)場離奇詭異,居然都是意外死亡皮胡,警方通過查閱死者的電腦和手機(jī)痴颊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屡贺,“玉大人蠢棱,你說我怎么就攤上這事锌杀。” “怎么了泻仙?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵糕再,是天一觀的道長。 經(jīng)常有香客問我玉转,道長突想,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任究抓,我火速辦了婚禮猾担,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刺下。我一直安慰自己绑嘹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布橘茉。 她就那樣靜靜地躺著工腋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畅卓。 梳的紋絲不亂的頭發(fā)上夷蚊,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音髓介,去河邊找鬼惕鼓。 笑死,一個胖子當(dāng)著我的面吹牛唐础,可吹牛的內(nèi)容都是我干的箱歧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼一膨,長吁一口氣:“原來是場噩夢啊……” “哼呀邢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豹绪,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤价淌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞒津,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝉衣,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年巷蚪,在試婚紗的時候發(fā)現(xiàn)自己被綠了病毡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡屁柏,死狀恐怖啦膜,靈堂內(nèi)的尸體忽然破棺而出有送,到底是詐尸還是另有隱情,我是刑警寧澤僧家,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布雀摘,位于F島的核電站,受9級特大地震影響八拱,放射性物質(zhì)發(fā)生泄漏阵赠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一乘粒、第九天 我趴在偏房一處隱蔽的房頂上張望豌注。 院中可真熱鬧,春花似錦灯萍、人聲如沸轧铁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽齿风。三九已至,卻和暖如春绑洛,著一層夾襖步出監(jiān)牢的瞬間救斑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工真屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脸候,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓绑蔫,卻偏偏與公主長得像运沦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子配深,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354