Vue.js 组件

Vue组件就是可复用的Vue实例,把经常使用的功能封装成组件然后在使用时能够更便捷。Vue.js使用Vue.component()函数来创建组件,Vue.component()
的第一个参数是组件的名称,第二个参数以对象的形式去描述一个组件。因为组件是可复用的Vue实例,所以它们与new Vue()接收相同的选项,例如data、
computed、watch、methods以及生命周期钩子等。仅有的例外是像el这样根实例特有的选项。

<div id="app">
       <button-counter title="点击次数:"></button-counter>
</div>
Vue.component('button-counter', {
	props: ['title'],//添加一个title属性
	data: function () {
	    return {
	        count: 0
	}
	},
	template: '<button v-on:click="count++">{{title}} You clicked me {{ count }} times.</button>'//模板内容
})
var vm = new Vue({
      el: "#app",
      data: {
      }
})

我们要注意,一个组件的模板(就是template后面那个)必须具备一个根节点,比如当template是这样时:

template: '<h1>Hi.....</h1><button v-on:click="count++">{{title}} You clicked me {{ count }} times.</button>'

模板中的元素就不会正常渲染,但当我们像下面这样用一个

标签把两个组件包裹起来:

template: '<div><h1>Hi.....</h1><button v-on:click="count++">{{title}} You clicked me {{ count }} times.</button></div>'

这样两个组件都会正常渲染。下面我们来看一下组件的事件监听,我们将上面的v-on:click="count++"改为v-on:click=“clickfun”,即把一个JavaScript脚本
改成一个可执行的JavaScript函数。然后我们使用methods属性去声明对应的JavaScript函数,在函数内部我们用this对象,对它的变量进行加一处理。我们
还可以通过this对象的$emit()方法去触发一个事件,该方法的第一个参数是事件名称,第二个参数是一些可携带的参数。

Vue.component('button-counter', {
	props: ['title'],//添加一个title属性
	data: function () {
	    return {
	        count: 0
	}
	},
	template: '<div><h1>Hi.....</h1><button v-on:click="clickfun">{{title}} You clicked me {{ count }} times.</button></div>',
	methods:{
	        clickfun: function () {
	               this.count ++;
	               this.$emit('clicknow', this.count);
	        }
	}
})

在组件的父级就可以通过事件绑定的方式接收到emit函数所触发的事件:

<button-counter title="点击次数:" @clicknow="clicknow"></button-counter>

我们在页面上同样使用methods属性来声明clicknow方法:

var vm = new Vue({
      el: "#app",
      data: {
      },
      methods:{
              clicknow: function (e) {
	   console.log(e);
              }
      }
})

我们接受了一个参数,并打印了这个参数,可以通过浏览器中的右键检查打开控制台标签(console),之后点击按钮观察效果。
我们还可以通过标签来形成组件插槽,通过这个插槽在组件的标签内部我们可以插入一些自定义的HTML内容:

template: '<div><h1>Hi.....</h1><button v-on:click="clickfun">{{title}} You clicked me {{ count }} times.</button></div>',
<button-counter title="点击次数:">
        <h2>Hello Vue</h2>
</button-counter>

提示

嗯…如果有人想直接粘贴代码测试的话注意一下逗号,我也不知道有几个忘换成英语逗号了。
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值