基于todolist功能——对组件进行拆分(组件与实例的关系)

todolist功能开发

下述例子实现功能:在input框输入内容的时候,通过点击提交按钮将内容发布在列表之中
基于todolist功能——对组件进行拆分(组件与实例的关系)
页面渲染结果
基于todolist功能——对组件进行拆分(组件与实例的关系)

代码解析:

  • 通过v-model对数据进行双向绑定,这样输入框里每一次输入的内容都会被存到data的inputValue值当中。
  • 通过v-on:click在提交按钮上绑定了一个名为Submit的方法函数,在每一次点击提交按钮时,Submit方法都会将inputValue的值通过push的方法添加到list中,之后再把inputValue中的值给清空。
  • 最后 ul列表通过v-for的方法对list中的数据进行循环展示。

Vue中的组件拆分

下面对上述例子中列表的li标签进行组件化

1.全局组件:所有实例都能使用的组件

基于todolist功能——对组件进行拆分(组件与实例的关系)
页面渲染结果
基于todolist功能——对组件进行拆分(组件与实例的关系)

代码解析

  • 通过Vue中创建组将的方法:Vue.component创建了一个名为todo-item的全局组件,这样就可以在页面中通过<todo-item></todo-item>标签的形式使用该组件。
  • 组件中prop是子组件用来接受父组件传递过来的数据的一个自定义属性。父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 “prop”:
  • 子组件通过名为content的属性接收父组件传递过来的item的值,再在template中与模板进行拼接,最后展示在页面中。(注意: prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来)

2局部组件:只能在注册该组件的实例中使用

基于todolist功能——对组件进行拆分(组件与实例的关系)

代码解析

  • 在vue实例的我们注册了一个名为Todoitem的局部组件,并且把组件命名为todo-item,这样我们就可以在实例中通过<todo-item></todo-item>标签使用该组件。

组件和实例的关系

每个组件都是一个vue的实例,一个vue项目是由无数个vue实例(组件)组成的。
因为组件也是实例,所以每个组件都可以有自己的methods,data等。

todolist删除功能

通过上述例子,我们可以知道父组件向子组件传值是通过属性的方式来传值。

那么如果想要删除子组件的某一条数据,那么我们就得去删除父组件里对应的那一条数据,那么子组件如何告诉父组件要删除的是那一条数据?

方法:通过发布订阅形式,子组件发布事件,父组件监听订阅该事件。

代码功能:发布后通过点击对应的li标签,实现该标签的删除
基于todolist功能——对组件进行拆分(组件与实例的关系)
基于todolist功能——对组件进行拆分(组件与实例的关系)

代码分析:

  • 子组件在获取数据的同时,添加一个名为index的属性,用来获取数据在例表中所在的位置。
  • 在每一条li标签上绑定一个名为handleClick的函数事件,当点击对应的li标签时,触发delete事件并且传递数据的下标值(index)。
  • 当父组件监听到子组件的delete事件发生的时候,获取到index并执行handleDelete事件,通过list.splice方法删除list中下标为index的元素。

本文内容均来自个人总结,并不代表完全正确,如有错误请大神指出。