Vue的學(xué)習(xí)筆記-Day4-01(父組件向子組件傳值、評論列表汽纠、ref的使用)

一卫键、父組件向子組件傳值

<div id="app">
    <!--父組件可以在引用子組件的時候,通過屬性綁定{v-bind:}的形式虱朵,把需要傳遞給子組件的數(shù)據(jù)莉炉,以屬性綁定的形式,傳遞到子組件內(nèi)部碴犬,供子組件使用-->
    <com1 :parentmsg="msg "></com1>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg: '父組件的數(shù)據(jù)'
        },
        methods: {},
        components: {
            //子組件中默認(rèn)無法訪問到父組件中的data上的數(shù)據(jù)和methods中的方法
            com1: {
                data() {//子組件中的data數(shù)據(jù)并不是通過父組件傳遞過來的絮宁,而是子組件自身私有的
                    return {
                        title: '123',
                        content: 'qqq'
                    }
                },
                template: '<h1>這是子組件 --- {{parentmsg}}</h1>',
                /*組件中的所有props中的數(shù)據(jù),都是通過父組件傳遞給子組件的*/
                /*props中的數(shù)據(jù)只是可讀的服协,不可以改變绍昂,而data中的數(shù)據(jù)可讀可寫*/
                props: ['parentmsg']//把父組件傳遞過來的parentmsg屬性,現(xiàn)在props數(shù)組中定義一下偿荷,這樣才能使用這個數(shù)據(jù)
            }
        }
    })
</script>

二窘游、父組件把方法傳遞給子組件同時傳值

<div id="app">
    <!--父組件向子組件傳遞方法,使用的是事件綁定機制 v-on: 當(dāng)我們自定義了一個事件屬性之后跳纳,子組件可以通過某些方法來調(diào)用傳遞進去的這個方法-->
    <com2 @func="show"></com2>
</div>

<template id="tmpl">
    <div>
        <h1>這是子組件</h1>
        <input type="button" value="這是子組件中的按鈕 - 點擊它忍饰,觸發(fā)父組件傳遞出來的func方法" @click="myClick">
    </div>
</template>

<script>

    var com2 = {
        template: '#tmpl',
        data() {
            return {
                sonmsg: {name: '小頭兒子', age: 6}
            }
        },
        methods: {
            myClick() {
                //emit 英文原意是觸發(fā)的意思
                this.$emit('func', this.sonmsg, 456);
            }
        }
    };


    var vm = new Vue({
        el: '#app',
        data: {
            dataMsgFromSon: null
        },
        methods: {
            show(data, data2) {
                // console.log('調(diào)用了父組件身上的show方法---' + data + '---' + data2);
                // console.log(data);
                this.dataMsgFromSon = data;
            }
        },
        components: {
            com2
        }
    })
</script>

三、組件案例-評論列表

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="lib/bootstrap.css">
    <script src="lib/vue-2.6.10.js"></script>
</head>
<body>

<div id="app">

    <cmt-box @func="loadComments"></cmt-box>

    <ul class="list-group">
        <li class="list-group-item" v-for="(item,i) in list" :key="item.i">
            <span class="badge">評論人:{{item.user}}</span>
            {{item.content}}
        </li>
    </ul>

</div>

<template id="tmpl">
    <div>
        <div class="form-group">
            <label>評論人:</label>
            <input type="text" class="form-control" v-model="user">
        </div>

        <div class="form-group">
            <label>評論內(nèi)容:</label>
            <textarea class="form-control" v-model="content"></textarea>
        </div>

        <div class="form-group">
            <input type="button" value="發(fā)表評論" class="btn btn-primary" @click="postComment">
        </div>
    </div>
</template>

<script>
    var commentBox = {
        data() {
            return {
                user: '',
                content: ''
            }
        },
        template: '#tmpl',
        methods: {
            postComment() {//發(fā)表評論的方法
                //分析發(fā)表評論的業(yè)務(wù)邏輯
                //1棒旗、評論數(shù)據(jù)存到 localStorage
                //2喘批、先組織一個最新的評論數(shù)據(jù)對象
                //3、想辦法把第二步得到的評論對象保存到localStorage
                //3.1铣揉、localStorage只支持存放字符串饶深,要先調(diào)用JSON.stringify
                //3.2、在保存最新的評論數(shù)據(jù)之前逛拱,要先從localStorage獲取到之前的評論數(shù)據(jù)敌厘,把最新的評論push到這個數(shù)組
                //3.3、如果獲取到的評論字符串為空或者不存在朽合,則可以返回一個'[]'俱两,讓JSON.parse去轉(zhuǎn)換
                //3.4、把最新的評論列表數(shù)組曹步,再次調(diào)用JSON.stringify轉(zhuǎn)換為數(shù)組字符串宪彩,然后調(diào)用localStorage.setItem();

                var comment = {id: Date.now(), user: this.user, content: this.content};

                /*從localStorage中獲取的所有評論*/
                var list = JSON.parse(localStorage.getItem('cmts') || '[]');
                list.unshift(comment);
                localStorage.setItem('cmts', JSON.stringify(list));
                this.user = this.content = '';

                this.$emit('func');
            }
        }
    };

    var vm = new Vue({
        el: '#app',
        data: {
            list: []
        },
        created() {
            this.loadComments();
        },
        methods: {
            loadComments() {//從本地的localStorage中加載評論列表
                let list = JSON.parse(localStorage.getItem('cmts') || '[]');
                this.list = list;
            }
        },
        components: {
            'cmt-box': commentBox
        }
    })
</script>

</body>
</html>

四、使用ref獲取dom元素和組件

<div id="app">
    <input type="button" value="獲取元素" @click="getElement">

    <h3 ref="myh3">哈哈哈讲婚,今天天氣太好了尿孔!</h3>

    <hr>

    <login ref="mylogin"></login>
</div>

<script>

    var login = {
        template: '<h1>登錄組件</h1>',
        data() {
            return {
                msg: 'son msg'
            }
        },
        methods: {
            show() {
                console.log('調(diào)用了子組件的方法');
            }
        }
    };

    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {
            getElement() {
                //ref是英文單詞reference 引用的意思
                console.log(this.$refs.mylogin.msg);
                this.$refs.mylogin.show();
            }
        },
        components: {
            login
        }
    })
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筹麸,隨后出現(xiàn)的幾起案子活合,更是在濱河造成了極大的恐慌,老刑警劉巖物赶,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件白指,死亡現(xiàn)場離奇詭異,居然都是意外死亡酵紫,警方通過查閱死者的電腦和手機告嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奖地,“玉大人状蜗,你說我怎么就攤上這事○亩” “怎么了轧坎?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泽示。 經(jīng)常有香客問我缸血,道長,這世上最難降的妖魔是什么械筛? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任捎泻,我火速辦了婚禮,結(jié)果婚禮上埋哟,老公的妹妹穿的比我還像新娘笆豁。我一直安慰自己郎汪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布闯狱。 她就那樣靜靜地躺著煞赢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哄孤。 梳的紋絲不亂的頭發(fā)上照筑,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音瘦陈,去河邊找鬼凝危。 笑死,一個胖子當(dāng)著我的面吹牛晨逝,可吹牛的內(nèi)容都是我干的蛾默。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼捉貌,長吁一口氣:“原來是場噩夢啊……” “哼趴生!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昏翰,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤苍匆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棚菊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浸踩,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年统求,在試婚紗的時候發(fā)現(xiàn)自己被綠了检碗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡码邻,死狀恐怖折剃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情像屋,我是刑警寧澤怕犁,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站己莺,受9級特大地震影響奏甫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凌受,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一阵子、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胜蛉,春花似錦挠进、人聲如沸色乾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暖璧。三九已至,卻和暖如春攘须,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殴泰。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工于宙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悍汛。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓捞魁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親离咐。 傳聞我的和親對象是個殘疾皇子谱俭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351