Vue中組件

1凭峡,組件(component): 是vue最強大的功能之一 組件化開發(fā) 組件可以擴展 HTML 元素,封裝可重用的代碼决记。全局 局部

2想罕,組件之間的傳值

父傳子 用屬性傳

子傳父 用事件傳

同級之間傳值

1父傳子:

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
    </head>

    <body>
        <script src="js/vue.js"></script>
        <div id="box">
            <one></one>
        </div>
        <script>
            Vue.component("one", {
                template: `
                <div>
            <zhang v-bind:xin='arrs'></zhang>
            <chong v-bind:xin1='arr'></chong>
            </div>
            `,
                data: function() {
                    return {
                        arr: ['蘋果', '橘子', '葡萄'],
                        arrs: '水果列表'
                    }
                }
            })
            Vue.component('zhang', {
                props: ['xin'],
                template: `
            <h2>{{xin}}</h2>
            `
            })
            Vue.component('chong', {
                props: ['xin1'],
                template: `
            <ul>
            <li v-for='value in xin1'>{{value}}</li>
            </ul>
            `
            })
            new Vue({
                el: '#box'
            })
        </script>
    </body>

</html>

2父傳子做的一個添加刪除效果:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script src="js/vue.js"></script>
        <div id="box">
            <zhang></zhang>
        </div>
        <script>
            Vue.component('zhang',{
                template:`
                <div>
                <input v-model='arrs'></input>
                <button v-on:click='add'>添加</button>
                <zhang1 v-bind:xin='arr'></zhang1>
                </div>
                `,
                data:function(){
                    return{
                        arr:['蘋果','西瓜','香蕉'],
                        arrs:''
                    }
                },
                methods:{
                    add:function(){
                        this.arr.push(this.arrs),
                        this.arrs=''
                    }
                }
            })
            
            Vue.component('zhang1',{
                props:['xin']
                ,template:`
                <ul>
                <li v-for='(value,index) in xin'>{{value}}
                <button v-on:click='add(index)'>刪除</button>
                </li>
                 </ul>  
                `,
                methods:{
                    add:function(ind){
                        this.xin.splice(ind,1)
                    }
                }
            })
            new Vue({
                el:'#box'
            })
        </script>
    </body>
</html>

3,父傳子做的一個購物車效果:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>
        <script src="js/vue.js"></script>
        <div id="box">

            <zhang></zhang>
        </div>
        <script>
            Vue.component('zhang', {
                template: `
                <table border="1" cellspacing="0" cellpadding="" style="width: 500px; margin: 0 auto; text-align: center;">
                <tr>
                <th>編號</th>
                    <th>名稱</th>
                    <th>價格</th>
                    <th>數(shù)量</th>
                    <th>小計</th>
                </tr>
                <zhang1 v-bind:xin='arr'></zhang1>
            </table>
            
                `,
                data: function() {
                    return {
                        arr: [{
                                name1: '蘋果',
                                name2: 2,
                                name3: 2,
                                name4: 4
                            },
                            {
                                name1: '西瓜',
                                name2: 3,
                                name3: 3,
                                name4: 9
                            },
                            {
                                name1: '葡萄',
                                name2: 4,
                                name3: 4,
                                name4: 16
                            }
                        ]
                    }
                }
            })

            Vue.component('zhang1', {
                props: ['xin'],
                template: `
                <tbody>
                <tr v-for="(value,index) in xin">
                <td>{{index+1}}</td>
                <td>{{value.name1}}</td>
                <td>{{value.name2}}</td>
                <td>
                <button v-on:click='add(index)'>+</button>
                {{value.name3}}
                <button v-on:click='app(index)'>-</button>
                </td>
                <td>{{value.name4}}</td>
                </tr>
                <tr>
                <td colspan=5>總價:{{sum}}</td>
                </tr>
                </tbody>
                `,
                data: function() {
                    return {
                        sum: 0
                    }
                },
                methods: {
                    add: function(ind) {
                        this.xin[ind].name3++;
                        this.xin[ind].name4 = this.xin[ind].name3 * this.xin[ind].name2;
                        this.apd()
                    },
                    app: function(ind) {
                        if(this.xin[ind].name3 > 1) {
                            this.xin[ind].name3--
                        }
                        this.xin[ind].name4 = this.xin[ind].name3 * this.xin[ind].name2
                        this.apd()
                    },
                    apd: function() {
                        for(var i = 0, zong=0; i < this.xin.length; i++) {
                            zong+=this.xin[i].name4
                        }
                        this.sum=zong;
                    }
                }
            })
            new Vue({
                el: '#box'
            })
        </script>
    </body>
</html>
子傳父:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
   <div id='app'>
       <my-father></my-father>
   </div>
    <script src='js/vue.js'></script>
    <script>
        Vue.component('my-father',{
            template:`
                <div>
                   <h1>{{mess}}</h1>
                   <my-child @add='app'></my-child>
                </div>
             `,
            data:function(){
                return{
                    mess:''
                }
            },
            methods:{
               app:function(txt){
                   this.mess=txt
               }
             }
        })
        
        Vue.component('my-child',{
            template:`
                 <button @click='sendFather'>給父組件</button>
             `,
            data:function(){
                return{
                    msg:'hello Vue'
                }
            },
            methods:{
                sendFather:function(){
//                   this.$emit('自定義事件',參數(shù)) 
                    this.$emit('add',this.msg)
                }
            }
        })
        
        
        new Vue({
            el:"#app"
        })
    </script>
</body>
</html>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末霉涨,一起剝皮案震驚了整個濱河市按价,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笙瑟,老刑警劉巖楼镐,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異往枷,居然都是意外死亡框产,警方通過查閱死者的電腦和手機凄杯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秉宿,“玉大人戒突,你說我怎么就攤上這事∶枘溃” “怎么了膊存?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忱叭。 經(jīng)常有香客問我隔崎,道長,這世上最難降的妖魔是什么韵丑? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任爵卒,我火速辦了婚禮,結果婚禮上撵彻,老公的妹妹穿的比我還像新娘钓株。我一直安慰自己,他們只是感情好陌僵,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布轴合。 她就那樣靜靜地躺著,像睡著了一般拾弃。 火紅的嫁衣襯著肌膚如雪值桩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天豪椿,我揣著相機與錄音奔坟,去河邊找鬼。 笑死搭盾,一個胖子當著我的面吹牛咳秉,可吹牛的內容都是我干的。 我是一名探鬼主播鸯隅,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼澜建,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝌以?” 一聲冷哼從身側響起炕舵,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跟畅,沒想到半個月后咽筋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡徊件,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年奸攻,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒜危。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡睹耐,死狀恐怖辐赞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情硝训,我是刑警寧澤响委,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站捎迫,受9級特大地震影響晃酒,放射性物質發(fā)生泄漏表牢。R本人自食惡果不足惜窄绒,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔兴。 院中可真熱鬧彰导,春花似錦、人聲如沸敲茄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堰燎。三九已至掏父,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秆剪,已是汗流浹背赊淑。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仅讽,地道東北人陶缺。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像洁灵,于是被迫代替她去往敵國和親饱岸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • 前言 您將在本文當中了解到,往網(wǎng)頁中添加數(shù)據(jù),從傳統(tǒng)的dom操作過渡到數(shù)據(jù)層操作,實現(xiàn)同一個目標,兩種不同的方式....
    itclanCoder閱讀 25,741評論 1 12
  • 組件(Component)是Vue.js最核心的功能徽千,也是整個架構設計最精彩的地方苫费,當然也是最難掌握的。...
    六個周閱讀 5,582評論 0 32
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容双抽,還有我對于 Vue 1.0 印象不深的內容百框。關于...
    云之外閱讀 5,045評論 0 29
  • # 傳智播客vue 學習## 1. 什么是 Vue.js* Vue 開發(fā)手機 APP 需要借助于 Weex* Vu...
    再見天才閱讀 3,525評論 0 6
  • 我盼望已久的五一假期終于來了,因為姑媽荠诬、姑父要從上豪欧回來位仁。說帶我和妹妹一起回老家。摘櫻桃方椎、看小羊聂抢、小狗,還有看...
    我的成長故事閱讀 318評論 0 0