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 相关文章推荐
javascript下IE与FF兼容函数收集
Sep 17 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
Mar 16 Javascript
js 数值项目的格式化函数代码
May 14 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
详解JavaScript的Date对象(制作简易钟表)
Apr 07 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
jquery实现无刷新验证码的简单实例
May 19 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
Dec 13 Javascript
js实现获取鼠标当前的位置
Dec 14 Javascript
详解webpack模块化管理和打包工具
Apr 21 Javascript
VUE解决 v-html不能触发点击事件的问题
Oct 28 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获取url参数方法总结
2014/11/13 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
理解javascript正则表达式
2016/03/08 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
Python之文字转图片方法
2018/05/10 Python
python查看模块安装位置的方法
2018/10/16 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
python取均匀不重复的随机数方式
2019/11/27 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
C语言编程练习
2012/04/02 面试题
预备党员转正思想汇报
2014/01/12 职场文书
七年级生物教学反思
2014/01/30 职场文书
销售经理岗位职责
2014/03/16 职场文书
欠条格式范本
2015/07/03 职场文书
python基础之类方法和静态方法
2021/10/24 Python