写一个vue组件

写一个vue组件

我下面写的是以.vue结尾的单文件组件的写法,是基于webpack构建的项目。如果还不知道怎么用webpack构建一个vue的工程的,可以移步到vue-cli。

一个完整的vue组件会包括一下三个部分:

  1. template:模板
  2. js: 逻辑
  3. css : 样式

每个组件都有属于自己的模板,js和样式。如果将一个页面比喻成一间房子的话,组件就是房子里的客厅、卧室、厨房、厕所。如果把厨房单独拿出来的话,组件又可以是刀、油烟机...等等。就是说页面是由组件构成的,而组件也可以是组件构成的。这样就可以非常的灵活,耦合性也非常的低。

首先来看看一个组件在不是在.vue文件内的写法:

Vue.component('simple-counter', {
  template: '
', data () { // 数据 return { counter: 0 } }, methods: { // 写点方法 }, created () { // 生命钩子 }, computed: { // 计算属性 } })

template是用来干嘛的呢?



js部分

export default {
  data () {
    return {
      counter: 0
    }
  },
  methods: {
    // 方法
  },
  created () {
    // 生命钩子
  },
  computed: {
    // 计算属性
  }
}
// 在这里很明显js部分就是对应的原生写法内的非template部分了。
// export default这个是es6的模块写法,不懂的可以先去了解es6的模块化

css部分


引入

要怎么在其它组件引用该组件?

组件一(button.vue)


组件二(box.vue)

这里box.vue里引入了button.vue的组件,并通过components注册,在box.vue使用时只要使用注册时候的名称即可。

父组件向子组件传递数据

可以通过prop向子组件传值。

子组件和父组件的交互其实还有很多,例如子组件要怎么修改父组件传递的值?

因为vue的数据是单向的,所以子组件是不允许修改父组件的值的,官方是通过事件的形式修改的,就是父组件在子组件绑定一个自定义事件v-on:event1="event1",
然后子组件通过this.$emit('event1')触发修改。可以理解为修改父组件传递的值一定要发生在父组件所在的作用域内。

父组件怎么获取子组件的实例

这里父组件可以在子组件定义ref,在通过this.$refs.xxx获取对应的子组件实例。

而子组件可通过this.$parent获取父组件的实例。

你可能感兴趣的:(写一个vue组件)