使用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 相关文章推荐
学习面向对象之面向对象的术语
Nov 30 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
使用jquery操作session方法分享
Jan 22 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
Aug 02 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
Dec 24 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
vue实现路由懒加载的3种方法示例
Sep 01 Javascript
深入理解javascript中的this
Feb 08 Javascript
Ajax实现三级联动效果
Oct 05 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无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
python读取和保存视频文件
2018/04/16 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
C语言笔试题回忆
2015/04/02 面试题
周年庆典邀请函范文
2014/01/23 职场文书
学校课外活动总结
2014/05/08 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers