Vue+element实现todo(七—组件化)

在todolist内容中,我只把ul部分写成了子组件,因为公共部分也只有这部分

首先新建一个子组件as.vue(类名是因为项目比较简单,所以就没有刻意去取名),然后再定义输出接口,


image.png


然后在文件 父组件(也就是helloworld,vue) 中引入 import


image.png

然后再在父组件中使用这个模板
image.png


然后在把我们ul的代码复制过去


image.png

同时,去掉了 ul 标签上的 v-for 和绑定指令,因为我们这只是在定义组件,而不是像上面那样循环渲染组件,那我们子组件如何拿到父组件传过来的值就需要用到props
image.png

我们需要Item这个值,同时,我们还设置了item 数据的要求,即它的类型是一个 Object,而且必须传递,不能缺少。

接着我们还绑定了一个@click,我们这里绑定监听了一个 remove-todo 事件,这个事件组件中点击删除按钮触发的,但是它无法直接访问父组件的数据,而且组件的数据流向是单向的,只能从父组件通过 props 传到子组件,那么如何使组件中的操作反应到父组件上呢?
这里就需要用到$emit,


image.png

第一个是你给这个事件取得名字,同时时间还可以携带数据,这里我们把组件实例绑定的 item 也发送了出去。
定义了这个组件,我们就可以在应用中使用了,将原来渲染待办事项的 html 代码替换为自定义的组件:


image.png

一旦监听到这个事件被触发,就会调用父组件的removeto方法。
接着可以在父组件中这样写
image.png

把需要替换的地方替换掉。
另外,我们还家了这样一行代码(蓝框)


image.png

因为我们可能有的地方结构不太一样,例如在全部任务我们需要有一个双击编辑的作用,但是未完成和已完成是没有的,就需要给组件加一个<slot></slot>插槽,说明这些地方我要点自己的东西,然后再父组件里
image.png

直接加上自己的代码就好了

最后打包上线

感觉组件还有很多需要学习的地方,个别地方写的有点乱....

线上访问地址
github地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,116评论 0 25
  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 13,183评论 0 13
  • 组件(Component)是Vue.js最核心的功能,也是整个架构设计最精彩的地方,当然也是最难掌握的。...
    六个周阅读 10,945评论 0 32
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 6,707评论 0 6
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 8,722评论 0 25

友情链接更多精彩内容