vue.js 组件


1.组件的基础

1. 介绍

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
    <button-counter title="title1 : " @clicknow="clicknow">
        <h2>hi...h2</h2>
    </button-counter>
    <button-counter title="title2 : "></button-counter>
</div>
<script type="text/javascript">
Vue.component('button-counter', {
    props: ['title'],
    data: function () {
        return {
          count: 0
        }
    },
    template: '<div><h1>hi...</h1><button v-on:click="clickfun">{{title}} You clicked me {{ count }} times.</button><slot></slot></div>',
    methods:{
        clickfun : function () {
            this.count ++;
            this.$emit('clicknow', this.count);
        }
    }
})
var vm = new Vue({
    el : "#app",
    data : {

    },
    methods:{
        clicknow : function (e) {
            console.log(e);
        }
    }
});
</script>
<style type="text/css">

</style>
</body>
</html>
  • 组件是可以复用的
  • 通过Vue 的 component 函数来创建组件
  • 这里的组件名称就是button-counter,也是component 函数的第一个参数
  • component 函数的第二个参数是一个对象包含data,template,methods等
  • html中以标签的形式引用组件 <button-counter></button-counter>
  • 事件绑定clicknow(事件名称),通过this的$emit(事件的名称,可携带的参数) 方法去触发clicknow 的函数,这里是通过父级的事件绑定clicknow="clicknow"
  • 模板template 可以使用 <slot></slot> 插槽,在组件中插入任意 的内容和标签

2. 单组件注册

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
    <button-counter></button-counter>
    <test></test>
</div>
<script type="text/javascript">
Vue.component('button-counter', {
    props: ['title'],
    data: function () {
        return {}
    },
    template: '<div><h1>hi...</h1></div>',
    methods:{

    }
})
var vm = new Vue({
    el : "#app",
    data : {

    },
    methods:{
        clicknow : function (e) {
            console.log(e);
        }
    },
    components:{
        test : {
            template:"<h2>h2...</h2>"
        }
    }
});
</script>
<style type="text/css">

</style>
</body>
</html>
  • 通过vue实例里面的components属性定义局部组件
components:{
        test : {
            template:"<h2>h2...</h2>"
        }
    }
<div id="app">
    <button-counter></button-counter>
    <test></test><-! 通过这样的方式引入局部组件></-!>
</div>