快捷搜索: 王者荣耀 脱发

【IMWeb训练营作业】Vue组件

【IMWeb训练营作业】Vue组件

DOM结构

<div id="app">
    <div style="float: left">
        <search-bar btn-value="查询" :list="movies"></search-bar>
    </div>
    <div style="float: left">
        <search-bar btn-value="搜索" :list="games"></search-bar>
    </div>
</div>

自定义组件

<script>
    Vue.component("search-bar", {
        data: function () {
          
   
            return {
                selectShow: false,
                val: ""
            }
        },
        props: [btnValue, "list"],
        template: <div class="warp"><div class="search clearFix"><input type="text" @click="selectShow = !selectShow" v-model="val"><input type="button" value="搜索" :value="btnValue"><span></span></div><custom-list v-show="selectShow" :list="list" :val="val"    @receive="changeValueHandle"></custom-list>,
        methods: {
            changeValueHandle: function (value) {
          
   
                this.val = value;
            }
        }
    })

    //自定义列表组件
    Vue.component(custom-list, {
        props: ["list", "val"],
        template: <div><ul class="list"><li v-for="(item,index) of list" @click="selectValueHandle(item,index)">{
          
   {item}}</li></ul></div>,
        methods: {
            //子组件向父组件通信,传递数据
            selectValueHandle: function (item, index) {
          
   
                this.$emit("receive", item, index);
            }
        }
    });

    new Vue({
        el: "#app",
        data: {
            movies: [肖申克的救赎, 这个杀手不太冷, 霸王别姬, 阿甘正传 , 美丽人生 , 千与千寻, 辛德勒的名单, 泰坦尼克号],
            games: ["冒险岛", "赤色要塞", "夺宝奇案", "魂斗罗", "超级玛丽", "拳皇", "忍者神龟"]
        }
    });
经验分享 程序员 微信小程序 职场和发展