Vue_局部组件5种定义方法

2019-04-12  本文已影响0人  Christoles

局部组件:需要在实例化对象中通过components属性进行注册。

以下均需引入:
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

第1种方法:

定义模板(script标签 - text / template):

实例:

<script type="text/template" id="tm">
    <div>我是写在script标签里面的模板</div>
</script>
<script type="text/javascript">
    var test2 = {
        template:"#tm"
    }
    var vm = new Vue({
        el:"#app",
        components:{//注册组件
            test2//定义模板
        }
    })
</script>

使用:

<div id="app">
    <test2></test2>
</div>

第2种方法:

相比 第1种方法 script 标签 text/template类型而言,其可以弹出提示功能,相当于改善版

html
<div id="app">
    <tm></tm>
</div>
<template id="tmp2">
    <div>
        <h1>{{msg}}</h1>
    </div>
</template>
javascript
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
//改善 script标签text/template 引进方法
Vue.component("tm",{//在html中渲染tm标签
    template:"#tmp2",
    data(){
        return {
            msg:"hello world !"
        }
    }
})
var vm = new Vue({
    el:"#app"
})
</script>

第3种方法:

直接定义
实例:

<script type="text/javascript">
    var test = {
        template:"<div>{{msg}}</div>",
        data:function(){
            return {
                msg:"我是局部组件"
            }
        }
    }
    var vm = new Vue({
        el:"#app",
        components:{//注册组件
            test//当键名等于键值的时候 test:test,可以缩写成一个
        }
    })
</script>

使用:

<div id="app">
    <test></test>
</div>

第4种方法:

间接定义

<script type="text/javascript">
    var tem = `<div>我是在组件外部定义的模板</div>`,
    var test5 = {
        template:tem
    }
    var vm = new Vue({
        el:"#app",
        components:{//注册组件
            test5
        }
    })
</script>

使用:

<div id="app">
    <test5></test5>
</div>

第5种方法:

外联inp.js文件

<script src="js/inp.js"></script>
//下面是inp.js:
function inp(){
    var obj = {
        props:["value"],//v-model 绑定数据默认是value
        template:`<div :style="inpBox">
            <input @input="$emit('input',$event.target.value)" :value="value" :style="inp"/>
        </div>`,
        //调用内建的 $emit(事件,) 方法 并传入事件名称来触发一个事件
        data:function(){
            return {
                inpBox:{
                    display:"inline-block",
                    border:"1px solid #666"
                },
                inp:{
                    border:"none",
                    outline:"none",
                    padding:"3px"
                }
            }
        }
    }
    return obj;
}

实例化vue

<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        components:{//注册组件
            inp:inp(),//inp.js里面定义的函数
        },
        data:{
            message:"hello world"
        }
    })
</script>

html中使用:

<div id="app">
    <inp v-model="message"></inp>
    <p>{{message}}</p>
</div>
上一篇下一篇

猜你喜欢

热点阅读