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 相关文章推荐
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
原生javascript实现无间缝滚动示例
Jan 28 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
Node.js插件安装图文教程
May 06 Javascript
js匿名函数作为函数参数详解
Jun 01 Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 Javascript
vue插件实现v-model功能
Sep 10 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
Aug 27 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 Javascript
js实现头像上传并且可预览提交
Dec 25 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
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
node中的session的具体使用
2018/09/14 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python实现人工蜂群算法
2020/09/18 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
党员剖析材料范文
2014/12/18 职场文书
服务承诺书
2015/01/19 职场文书
合作意向协议书
2015/01/29 职场文书
民事起诉书范本
2015/05/19 职场文书