使用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 相关文章推荐
Mootools 1.2教程 类(一)
Sep 15 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
JavaScript触发onScroll事件的函数节流详解
Dec 14 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
Dec 26 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
vue-router 中router-view不能渲染的解决方法
May 23 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
vue移动端实现红包雨效果
Jun 23 Javascript
基于vue实现移动端圆形旋钮插件效果
Nov 28 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
浅谈json_encode用法
2015/03/05 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
保安队长职务说明书
2014/02/23 职场文书
交通事故调解协议书
2014/04/16 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
宿舍标语大全
2014/06/19 职场文书
校车安全责任书
2014/08/25 职场文书
2016年记者节感言
2015/12/08 职场文书
导游词之任弼时故居
2020/01/07 职场文书
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js