使用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 相关文章推荐
jQuery ctrl+Enter shift+Enter实现代码
Feb 07 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
Mar 03 Javascript
js生成验证码并直接在前端判断
May 15 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
Bootstrap布局之栅格系统详解
Jun 13 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
jQuery.ajax向后台传递数组问题的解决方法
May 12 jQuery
JavaScript实现三级联动菜单效果
Aug 16 Javascript
React styled-components设置组件属性的方法
Aug 07 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 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上的memcache和memcached两个pecl库
2010/03/29 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python中格式化format()方法详解
2017/04/01 Python
Python实现的计数排序算法示例
2017/11/29 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
校园摄影活动策划方案
2014/02/05 职场文书
小学教师师德承诺书
2014/05/23 职场文书
百日安全生产活动总结
2014/07/05 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis