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 相关文章推荐
fix-ie5.js扩展在IE5下不能使用的几个方法
Aug 20 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
谈谈关于JavaScript 中的 MVC 模式
Apr 11 Javascript
利用javascript判断文件是否存在
Dec 31 Javascript
window.returnValue使用方法示例介绍
Jul 03 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
javascript数组排序汇总
Jul 07 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
vue的路由映射问题及解决方案
Oct 14 Javascript
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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
最简单的PHP程序--记数器
2006/10/09 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
Python 装饰器使用详解
2017/07/29 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
公务员总结性个人自我评价
2013/12/05 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python
如何基于python实现单目三维重建详解
2022/06/25 Python