w4d2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--角色:
vm
vm的v
vm的m
組件
組件的v
組件的m
-->
<div id="app">
    <p><!--插值表達式-->{{msg}}</p>
    <!--3、使用已經註冊過的組件-->
    <!--瀏覽器會把我們標籤的大寫轉化成小寫,所以組件註冊的時候不要用大寫。-->
    <!--組件訪問vm中data第2步:將vm的data中屬性與組件的同名屬性綁定起來-->

    <!--在組件中調用vm中方法第1步:綁定一個自定義事件,名字隨意-->
    <zujian1 :msg="msg" @callvmmethod="vmmethod"></zujian1>
</div>

<script src="js/vue.js"></script>
<script>
    /*組件使用案例:*/
    /*1、創建一個組件模板對象*/
    /*1.1用vue.extend方法創建組件*/
    /*var zujian1Template = Vue.extend({
        template: '<div id="zujian1"><h2>800行代碼</h2><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p></div>',
    });*/
    /*1.2用一種更偷懶的方式創建組件*/
    var data = {
        tiancimoney: 9999999,
    }
    var zujian1Template = {
        /*這個template是用來設置組件的代碼模板*/
        /*組件訪問vm中data第1步:設置props,props使組件具有了訪問vm中data屬性值的能力*/
        props: ['msg'],
        template: `
            <div id="zujian1">
                <h2>800行代碼</h2>
                <p>我是組件的v,我正在試圖獲取vm的data中的msg的值:{{msg}}</p>
                <p>我是組件的v,我正在試圖獲取我自己的的data中的tiancimoney的值:{{tiancimoney}}</p>
<!--                <button @click="vmmethod">我是組件的v,點我就會試圖調用vm對象中的methods下的vmmethod</button>-->
                <button @click="$emit('callvmmethod')">我是組件的v,我會成功調用到vm中的vmmethod方法</button>
                <button @click="tiancimoney-=100">點我一下,天賜money就會少一塊。</button>

            </div>
        `,
        /*vm相當於一個大組件,但vm中data屬性使用的方式和組件中data屬性使用方式不一樣。*/
        data: () => {
            return {
                tiancimoney: 9999999,
            };
        },
        methods: {}
    };

    /*2、註冊組件到vue之中*/
    /*2.1、全局註冊*/
    /*注意:組件註冊不要用大寫*/
    Vue.component('zujian1', zujian1Template);
    var vm = new Vue({
        el: '#app',
        /*data是mvvm中的m——model*/
        data: {
            msg: 'vm的data中的數據',
            money: 1999,
        },
        methods: {
            vmmethod() {
                alert('我被調用了');
            }
        }
        /*2.2、私有組件註冊,在vm對象定義裏面,設置components屬性,註冊一個私有組件*/
        // components: {d
        //     'zujuan1': zujian1Template,
        // }
    });
</script>
</body>
</html>

組件案例代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--角色:
vm
vm的v
vm的m
組件
組件的v
組件的m
-->
<div id="app">
    <p><!--插值表達式-->{{msg}}</p>
    <!--3、使用已經註冊過的組件-->
    <!--瀏覽器會把我們標籤的大寫轉化成小寫,所以組件註冊的時候不要用大寫。-->

    <!--組件訪問vm中data第2步:將vm的data中屬性與組件的同名屬性綁定起來-->
    <zujian1 :msg="msg"></zujian1>
</div>

<script src="js/vue.js"></script>
<script>
    /*組件使用案例:*/
    /*1、創建一個組件模板對象*/
    /*1.1用vue.extend方法創建組件*/
    /*var zujian1Template = Vue.extend({
        template: '<div id="zujian1"><h2>800行代碼</h2><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p><p>我是一段文本</p></div>',
    });*/
    /*1.2用一種更偷懶的方式創建組件*/
    var zujian1Template = {
        /*這個template是用來設置組件的代碼模板*/
        /*組件訪問vm中data第1步:設置props,props使組件具有了訪問vm中data屬性值的能力*/
        props: ['msg'],
        template: `
            <div id="zujian1">
                <h2>800行代碼</h2>
                <p>我是組件的v,我正在試圖獲取vm的data中的msg的值:{{msg}}</p>
                <p>我是組件的v,我正在試圖獲取我自己的的data中的tiancimoney的值:{{tiancimoney}}</p>
                <button @click="tiancimoney-=100">點我一下,天賜money就會少一塊。</button>
            </div>
        `,
        data: () => {
            return {
                tiancimoney: 9999999,
            }
        },
        methods: {

        }

    };

    /*2、註冊組件到vue之中*/
    /*2.1、全局註冊*/
    /*注意:組件註冊不要用大寫*/
    Vue.component('zujian1', zujian1Template);
    var vm = new Vue({
        el: '#app',
        /*data是mvvm中的m——model*/
        data: {
            msg: 'vm的data中的數據',
            money: 1999,
        }
        /*2.2、私有組件註冊,在vm對象定義裏面,設置components屬性,註冊一個私有組件*/
        // components: {
        //     'zujuan1': zujian1Template,
        // }
    });




</script>
</body>
</html>

人員管理成品代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--2、創建一個視圖div,id是app-->
<div id="app">
    <div>
        姓名:<input type="text" v-model="name"><br>
        性別:<input type="text" v-model="sex"><br>
        <button @click="add">新增用戶</button>
    </div>
    <div>
        姓名:<input type="text" v-model="searchName"><br>
    </div>
    <table>
        <thead>
        <tr>
            <td><input type="checkbox"></td>
            <td>名字</td>
            <td>性別</td>
            <td>操作</td>
        </tr>
        </thead>
        <tbody>
        <tr v-for="(user, index) in search(searchName)">
            <td><input type="checkbox"></td>
            <td>{{user.name}}</td>
            <td>{{user.sex}}</td>
            <td>
                <button @click="del(index)">刪除</button>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<!--1、導入vue.js-->
<script src="js/vue.js"></script>
<script>
    /*3、創建vm對象*/
    var vm = new Vue({
        el: '#app',
        data: {
            name: '',
            sex: '',
            msg: 'hello',
            searchName: '',
            users: [
                {name: '羅小黑', sex: '男'},
                /*如果我們把對象的所有屬性值放進一個數組裏面,['羅小黑','男']*/
                {name: '羅中黑', sex: '男'},
                {name: '羅大黑', sex: '男'},
                {name: '羅超大黑', sex: '男'},
                {name: '上校的女朋友', sex: '女'},
            ],
        },
        methods: {
            add() {
                var user = {
                    name: this.name,
                    sex: this.sex
                }
                this.users.push(user);
            },
            del(index) {
                this.users.splice(index, 1);
            },
            search(s) {
                /*filter用來篩選數組中名字中有searchName的元素*/
                var resultArray = this.users.filter((user) => {
                    /*判斷user是否符合條件,如果符合就返回true*/
                    // var flag = user.name.includes(s);
                    /*先把對象用Object的values方法變成數組,再調用數組的join方法把數組所有元素拼接成一個長字符串,最後調用字符串的includes方法判斷s是不是其子串*/
                    flag = Object.values(user).join('-').includes(s);
                    return flag;
                });
                return resultArray;
            }
        }
    })
</script>
</body>
</html>

人員搜索案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--2、創建一個視圖div,id是app-->
<div id="app">
    <div>
        姓名:<input type="text" v-model="name"><br>
        性別:<input type="text" v-model="sex"><br>
        <button @click="add">新增用戶</button>
    </div>
    <div>
        姓名:<input type="text" v-model="searchName"><br>
    </div>
    <table>
        <thead>
        <tr>
            <td><input type="checkbox"></td>
            <td>名字</td>
            <td>性別</td>
            <td>操作</td>
        </tr>
        </thead>
        <tbody>
        <tr v-for="(user, index) in search(searchName)">
            <td><input type="checkbox"></td>
            <td>{{user.name}}</td>
            <td>{{user.sex}}</td>
            <td>
                <button @click="del(index)">刪除</button>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<!--1、導入vue.js-->
<script src="js/vue.js"></script>
<script>
    /*3、創建vm對象*/
    var vm = new Vue({
        el: '#app',
        data: {
            name: '',
            sex: '',
            msg: 'hello',
            searchName: '',
            users: [
                {name: '羅小黑', sex: '男'},
                /*如果我們把對象的所有屬性值放進一個數組裏面,['羅小黑','男']*/
                {name: '羅中黑', sex: '男'},
                {name: '羅大黑', sex: '男'},
                {name: '羅超大黑', sex: '男'},
            ],
        },
        methods: {
            add() {
                var user = {
                    name: this.name,
                    sex: this.sex
                }
                this.users.push(user);
            },
            del(index) {
                this.users.splice(index, 1);
            },
            search(s) {
                /*filter用來篩選數組中名字中有searchName的元素*/
                var resultArray=this.users.filter((user) => {
                    /*判斷user是否符合條件,如果符合就返回true*/
                    var flag = user.name.includes(s);
                    alert(Object.values(user));
                    return flag;
                })
                return resultArray;
            }
        }

    })
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--定義一個顯示商品信息的組件
.....省略若干定義代碼
-->
<!--<div id="app">-->
<!--    <div>顯示導航欄信息</div>-->
<!--    <商品組件></商品組件>-->
<!--</div>-->
<div id="app">
    <p>我是vm的視圖,我正在試圖獲取msg:{{msg}}</p>
    <input type="text" v-model="msg">
    <!--使用組件其實是在使用組件的template中的代碼-->
    <!--3、使用註冊好的組件-->
    <zujian1 :msg="msg"></zujian1>
    <zujian1></zujian1>

    <zujian2></zujian2>
</div>
<script src="js/vue.js"></script>
<script>
    /*使用組件的步驟*/
    /*1、創建一個組件模板對象*/
    /*1.1 使用extend進行創建*/
    /*var comTemp = Vue.extend({
        /!*組件的html代碼設置在template屬性中。*!/
        template: '<h2>我是一個組件中的視圖</h2>',
    })*/
    /*1.2 使用字面量創建*/
    var comTemp = {
        /*組件的html代碼設置在template屬性中。*/
        template: '<h2>我是一個組件中的視圖,我正在嘗試獲取vm的data中的msg:{{msg}}</h2>',
        props: ['msg']
    };
    /*1.3 最偷懶的創建組件的方法就是將創建的組件模板對象直接寫在component函數第二個參數位置。*/


    /*2、註冊公有或私有組件*/
    /*2.1註冊公有組件,公有組件定義在外部,每一個vm對象的視圖中都可以使用到公有組件*/
    Vue.component('zujian1', comTemp);
    Vue.component('zujian2', {
        template: '<p style="color:red">我是一個新的組件中的視圖代碼</p>'
    });


    /*創建一個vm對象*/
    var vm = new Vue({
        el: '#app',
        data: {
            msg: '一個文本信息',
            money: 99,
        },
        /*components: {
            /!*私有組件,只有當前vm的視圖中可以使用到這個組件*!/
            'siyouzujian1': comTemp
        }*/
    })
</script>
</body>
</html>

使用組件的data

<div id="app">
    <button-com></button-com>
</div>
<script src="js/vue.js"></script>
<script>
    /*註冊一個組件*/
    Vue.component('button-com', {
        template: `
            <div>
                <p>count的值爲:{{count}}</p>
                <button>點我就會把count的值+1</button>
            </div>
        `,
        data: {
            count: 0,
        }
    });
    var vm = new Vue({
        el: '#app',

    })
</script>

組件中調用vm中定義的方法的基本代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <button-com></button-com>
    <button-com></button-com>
    <button-com></button-com>
</div>
<script src="js/vue.js"></script>
<script>
    /*註冊一個組件*/
    Vue.component('button-com', {
        template: `
            <div>
                <p>money的值爲:{{money}}</p>
                <button @click="money--">點我就會把money的值-1</button>
                <button @click="sonM">點我就會調用sonM方法</button>
                <button @click="fatherM">點我就會去試着調用vm中的fatherM方法</button>
            </div>
        `,
        data: ()=>{
            /*當我們return 一個對象的時候,每次調用這個函數就會去重新創建一個對象並返回,所以我們應該return一個對象,因爲每次使用組件標籤,
            都會去調用data的函數獲得一個當前組件的data對象,這個對象應該是一個新對象,避免一個組件多次使用公用了同一個data對象的問題。*/
            return {
                money: 999,
            };
        },
        methods: {
            sonM() {
                alert('sonmethod')
            }
        }
    });
    var vm = new Vue({
        el: '#app',
        methods: {
            fatherM() {
                alert('vm中方法調用了')
            }
        }
    })
</script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章