IMWeb训练营作业——select组件

本次作业以组件的形式完成了下拉菜单的功能。

具体代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="vue.js"></script>
    <link rel="stylesheet" href="style.css" type="text/css"/>
    <title>customer_select</title>
</head>
<body>
<div id="app">
    <customer-select btn-value="查询"  v-bind:list="list1"></customer-select>
    <customer-select btn-value="搜索"  v-bind:list="list2"></customer-select>
</div>
<script>
    Vue.component("customer-select",{
        data:function(){
            return {
                selectShow:false,
                val:""
            }
        },
        props:["btnValue","list"],
        template:`
        <div class="wrap">
            <div class="searchIpt">
                        <div class="clearFix">
                             <input class="keyWords" type="text" :value="val"
                             @click="selectShow=!selectShow"
                             />
                             <input class="go" type="button" :value="btnValue"/>
                             <span></span>
                        </div>
                        <div class="list" v-show="selectShow" @click="selectShow=!selectShow" >
                            <list-show v-bind:list="list" v-on:receive="selectValueHandle"
                            ></list-show>
                        </div>
            </div>
        </div>`,
        methods:{
            selectValueHandle:function(value){
                this.val=value;
            }
        }
    });
    Vue.component("list-show",{
                props:["list"],
                template:`<ul>
                 <li v-for="item of list" @click="selectValueHandle(item)"
                 >{{item}}</li>
             </ul>`,
                methods:{
                    selectValueHandle:function(item){
                        this.$emit("receive",item);
                    }
                }
    });
    new Vue({
        el:"#app",
        data:{
            list1:["html+css","html5+css3","javascript","angular","react","vue","jquery","nodejs"],
            list2:["17-01-23","17-02-20","17-03-11","17-04-03"]
        }
    });
</script>
</body>
</html>


主要应用到的知识点:

1.组件的注册,可以分为全局注册和局部注册。全局注册可以在任何模板中使用,注册方法Vue.component(组件名,选项对象);而局部注册的组件只能在注册的作用域中使用,注册方法

{

components:{

组件名:选项对象

}

}

2.组件间的通信。当子组件需要父组件中数据时,可以通过自定义属性绑定数据,并用props显式声明该数据;当子组件向父组件传递数据时,需要用到自定义事件,父组件用$on监听,子组件用$emit触发父组件所关心的自定义事件。

3.组件中data必须是函数,因为数据共享会导致其影响其他组件中的该数据,通过函数可以使得每个组件中有独立的数据,组件间相互不影响。

运行效果:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值