使用Vue父子组件通信实现todolist的功能示例代码


Posted in Javascript onApril 11, 2019

先上代码

<body>
  <div id="root">
    <div>
      <input v-model="inputValue" />
      <button @click="handleClick">submit</button>
    </div>
      <ul>
        <todolist v-for="(item,index) of list"
         :key="index" 
         :content="item"
         :index="index"
         @delete="handle"
        ></todolist>
      </ul>
  </div>
  <script>

    Vue.component("todolist",{
      props: ['content','index'],
      template: '<li @click="handleDelete">{{content}}</li>',
      methods: {
        handleDelete:function(){
          this.$emit('delete',this.index)
        }
      }
      })

    new Vue({
      el:"#root",
      data: {
        inputValue:'',
        list:[]
      },
      methods: {
        handleClick:function(){
          this.list.push(this.inputValue)
          this.inputValue=''
        },
        handle:function(index){
          this.list.splice(index,1)
        }
      }
    })
  </script>
</body>

创建todolist的基本结构

<div id="root">
    <div>
      <input v-model="inputValue" />
      <button @click="handleClick">submit</button>
    </div>
      <ul>
        <todolist v-for="(item,index) of list"
         :key="index" 
         :content="item"
         :index="index"
         @delete="handle"
        ></todolist>
      </ul>
  </div>

在这里我们创建了一个todolist标签作为父组件,让它在里面循环遍历list作为我们的输出,同时定义了一个delete的监听事件。

接下来在script标签里定义子组件

Vue.component("todolist",{
      props: ['content','index'],
      template: '<li @click="handleDelete">{{content}}</li>',
      methods: {
        handleDelete:function(){
          this.$emit('delete',this.index)
        }
      }
      })

定义了一个全局类型的子组件,子组件的props选项能够接收来自父组件数据,props只能单向传递,即只能通过父组件向子组件传递,这里将上面父组件的content和index传递下来。

将li标签作为子组件的模板,添加监听事件handleDelete用与点击li标签进行删除。

在下面定义子组件的handleDelete方法,用this.$emit向父组件实现通信,这里传入了一个delete的event,参数是index,父组件通过@delete监听并接收参数

接下来是Vue实例

new Vue({
      el:"#root",
      data: {
        inputValue:'',
        list:[]
      },
      methods: {
        handleClick:function(){
          this.list.push(this.inputValue)
          this.inputValue=''
        },
        handle:function(index){
          this.list.splice(index,1)
        }
      }
    })

handleClick方法实现每次点击submit按钮时向list里添加值,在每次添加之后将输入框清空。

而handle方法则是点击删除li标签,这里通过接受传入的index参数来判断点击的是哪一个li

这是删除前:

使用Vue父子组件通信实现todolist的功能示例代码

这是删除后:

使用Vue父子组件通信实现todolist的功能示例代码

总结:

通过点击子组件的li实现向外触发一个delete事件,而父组件监听了子组件的delete事件,执行父组件的handle方法,从而删除掉对应index的列表项,todolist中的list对应项也会被删除掉。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
jquery获取css的color值返回RGB的方法
Dec 18 Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
Apr 24 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
vue 实现边输入边搜索功能的实例讲解
Sep 16 Javascript
详解如何webpack使用DllPlugin
Sep 30 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
详解jQuery设置内容和属性
Apr 11 #jQuery
js作用域和作用域链及预解析
Apr 11 #Javascript
关于js陀螺仪的理解分析
Apr 11 #Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 #Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 #Javascript
vue实现新闻展示页的步骤详解
Apr 11 #Javascript
记一次用vue做的活动页的方法步骤
Apr 11 #Javascript
You might like
两种php调用Java对象的方法
2006/10/09 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python回调函数的使用方法
2014/01/23 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
python实现的文件同步服务器实例
2015/06/02 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
销售经理工作失职检讨书
2014/10/24 职场文书
2014年度个人工作总结
2014/11/07 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
房屋所有权证明
2015/06/19 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书