Vue中父子组件通讯之todolist组件功能开发


Posted in Javascript onMay 21, 2018

一、todolist功能开发

Vue中父子组件通讯之todolist组件功能开发

<div id="root">
  <div>
   <input type="text" v-model="inputValue">
   <button @click="handleSubmit">提交</button>
  </div>
  <ul>
   <li v-for="(item, index ) of list" :key="index">{{item}} </li>
  </ul>
 </div>
 <script>
 new Vue({
  el:"#root",
  data:{
   inputValue:'',
   list:[]
  },
  methods:{
   handleSubmit:function(){
    this.list.push(this.inputValue);
    this.inputValue='';
   }
  }
 })
 </script>

二、todolist组件拆分

定义组件,组件和组件之间通讯

1、全局组件

<div id="root">
  <div>
   <input type="text" v-model="inputValue">
   <button @click="handleSubmit">提交</button>
  </div>
  <ul>
   <todo-item></todo-item>
  </ul>
 </div>
 <script>
 Vue.component('todo-item',{
  template:'<li>item</li>'
 })
...

2、局部组件

要注册,否则会报错:

vue.js:597 [Vue warn]: Unknown custom element: <todo-item> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <script src="./vue.js"></script>
</head>
<body>
 <div id="root">
  <div>
   <input type="text" v-model="inputValue">
   <button @click="handleSubmit">提交</button>
  </div>
  <ul>
   <todo-item></todo-item>
  </ul>
 </div>
 <script>
 //全局组件
 // Vue.component('todo-item',{
 //  template:'<li>item</li>'
 // })

 var TodoItem={
  template:'<li>item</li>'
 }
 new Vue({
  el:"#root",
  components:{
   'todo-item':TodoItem
  },
  data:{
   inputValue:'',
   list:[]
  },
  methods:{
   handleSubmit:function(){
    this.list.push(this.inputValue);
    this.inputValue='';
   }
  }
 })
 </script>
</body>
</html>

3、组件传值

父组件向子组件传值是通过属性的形式。

<div id="root">
  <div>
   <input type="text" v-model="inputValue">
   <button @click="handleSubmit">提交</button>
  </div>
  <ul>
   <todo-item 
    v-for="(item ,index) of list"
    :key="index"
    :content="item"
   ></todo-item>
  </ul>
 </div>
 <script>
 Vue.component('todo-item',{
  props: ['content'], //接收从外部传递进来的content属性
  template:'<li>{{content}}</li>'
 })
 new Vue({
  el:"#root",
  data:{
   inputValue:'',
   list:[]
  },
  methods:{
   handleSubmit:function(){
    this.list.push(this.inputValue);
    this.inputValue='';
   }
  }
 })
 </script>

三、组件与实例的关系

new Vue()实例

Vue.component是组件

每一个Vue组件又是一个Vue的实例。

任何一个vue项目都是由千千万万个vue实例组成的。

每个vue实例就是一个组件,每个组件也是vue的实例。

四、实现todolist的删除功能

子组件通过发布订阅模式通知父组件。

<div id="root">
  <div>
   <input type="text" v-model="inputValue">
   <button @click="handleSubmit">提交</button>
  </div>
  <ul>
   <todo-item 
    v-for="(item ,index) of list"
    :key="index"
    :content="item"
    :index="index"
    @delete='handleDelete'
   ></todo-item>
  </ul>
 </div>
 <script>
 Vue.component('todo-item',{
  props: ['content','index'], //接收从外部传递进来的content属性
  template:'<li @click="handleDeleteItem">{{content}}</li>',
  methods:{
   handleDeleteItem:function(){
    this.$emit('delete',this.index);
   }
  }
 })
 new Vue({
  el:"#root",
  data:{
   inputValue:'',
   list:[]
  },
  methods:{
   handleSubmit:function(){
    this.list.push(this.inputValue);
    this.inputValue='';
   },
   handleDelete:function(index){
    this.list.splice(index,1);
   }
  }
 })
 </script>

总结

以上所述是小编给大家介绍的Vue中父子组件通讯之todolist组件功能开发,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
Mar 27 Javascript
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
JavaScript通过元素的ID和name设置样式
Jul 08 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
javascript History对象原理解析
Feb 17 Javascript
vue3.0中使用element的完整步骤
Mar 04 Vue.js
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 #Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 #Javascript
JS实现的文件拖拽上传功能示例
May 21 #Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 #Javascript
Vue二次封装axios为插件使用详解
May 21 #Javascript
详解vue的diff算法原理
May 20 #Javascript
详解使用vue-admin-template的优化历程
May 20 #Javascript
You might like
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python入门篇之字符串
2014/10/17 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
对Django外键关系的描述
2019/07/26 Python
python实现倒计时小工具
2019/07/29 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
如何将字串String转换成整数int
2015/02/21 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
自我介绍演讲稿
2014/01/15 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
运动会跳远广播稿
2015/08/19 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书