vue的组件相关

组件是vue非常重要的内容,组件可以扩展 HTML 元素,封装可重用的代码。

组件是可复用的Vue实例,说白了就是一组可以重复使用的组件模板,跟JSTL的自定义标签、Thymeleaf 的th:fragment以及Sitemesh3 框架有着异曲同工之妙。通常一个应用会以一棵嵌套的组件树的形式来组织:

在这里插入图片描述
在页面开发时,可能页面里会用到相同的模块,比如顶部的菜单栏,左边的侧边栏等等,这些都是相同的模块。每次写代码都要写重复的代码,所以需要实现代码的复用来减少代码量,而组件可以定义模板,从而达到复用代码的作用。

当然,组件的作用不仅是减少复用,因为可以嵌套,所以组件里面又可以套组件,这样一层层组件,无限套娃。

组件的定义

我们的组件都只是通过 Vue.component 全局注册的:

Vue.component('my-component-name', {
  // ... options ...
})

注册一个全局组件语法格式如下:

Vue.component(tagName, options)

tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:

<tagName></tagName>

vue组件的示例:

      <div id="app">
        <my-component></my-component><!-- 利用组件名来使用定义的“模板” -->
      </div>

      <script>
        Vue.component('my-component',{ // “my-component”是组件名
          template: '<div><span>我的模板</span></div>'  //template参数是模板的内容
        })
        var vm = new Vue({
          el: '#app'
        })
    </script>

在这里插入图片描述

全局注册

组件的注册类型:全局注册和局部注册。

全局注册的组件可以用在其被注册之后的任何 (通过 new Vue) 新创建的 Vue 根实例,也包括其组件树中的所有子组件的模板中。

比如:

<div id="app">
  <component-a></component-a>
  <component-b></component-b>
  <component-c></component-c>
</div>
Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ })
//创建根实例
new Vue({ el: '#app' })

在所有子组件中也是如此,也就是说这三个组件在各自内部也都可以相互使用。

局部注册

全局注册往往是不够理想的。比如,如果你使用一个像 webpack 这样的构建系统,全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了用户下载的 JavaScript 的无谓的增加。

在这些情况下,你可以通过一个普通的 JavaScript 对象来定义组件:

var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }
var ComponentC = { /* ... */ }

new Vue({
  el: '#app',
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

注意局部注册的组件在其子组件中不可用。例如,如果你希望 ComponentA 在 ComponentB 中可用,则你需要这样写:

var ComponentA = { /* ... */ }

var ComponentB = {
  components: {
    'component-a': ComponentA
  },
  // ...
}

参数传递

上面组件的数据是写死的,如果我们想实现传递参数到组件,需要用到props。

props 是子组件用来接受父组件传递过来的数据的一个自定义属性。

父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 “prop”:

<div id="app">
	<ul>
		<my-component-li v-for="item in items" :item1="item"></my-component-li>
	</ul>
</div>

<script>
// 注册
Vue.component('my-component-li', {
  // 声明 props
  props: ['item1'],
  template: '<li>{{item1}}</li>'
})
// 创建根实例
new Vue({
  el: '#app',
  data:{
	items:['吃饭','睡觉','学习']
 }
})
</script>

在这里插入图片描述
说明:

  • v-for=“item in items” :遍历Vue 实例中定义的名为items的数组,并创建同等数量的组件
  • v-bind:item1=“item” :将遍历的item 项绑定到组件中props定义的名为item1 属性上; =号左边的item1为props定义的属性名,右边的为item in items 中遍历的item项的值

自定义事件

props是父组件向子组件传递消息,如果想要从子组件向父组件传递信息,需要用到自定义事件

可以看看这篇文章:vue自定义事件

插槽

和组件相关的还有一个比较重要的内容,就是插槽,这里可以看下这篇博客:vue插槽详解

目前就是对组件有一个简单的了解,这里推荐一个文章,写的比较具体一点:传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值