vue组件编写之todolist组件实例详解


Posted in Javascript onJanuary 22, 2018

我们在topNav这个页面上插入一个todolist子组件

我不知道怎么回事,这里的markdown的代码总是串行。。所以代码看得不舒服,见谅啊,我最后会放github的源代码地址。

1. 父组件topNav中注册子组件,引入子组件

<template>
 <div>
  <p>下面这一行就是定义的组件名称</p>
  <todo-list></todo-list>
  <router-view></router-view>
 </div>
</template>
<script>
/*

    1. 通过import来引入我们的子组件drawerLayout

    2. 引入子组件,并重新取名为todoList,然后在components组册一下

    3.在我们的template中按照html标签的形式使用组件,todoList就是<todo-list>

注意:

    (1) 子组件的名字无所谓,但是我们引入的那个子组件名todoList,第二个单词的首字母一定要大写(不然你会踩坑的)

    (2) 使用标签时,todoList,就是todo-list,就是写成驼峰命名法(通俗说就是在第二个单词的大写首字母改成小写形式,然后前面加一个 “-”)

*/
import todoList from '../components/todoList.vue'
 export default {
  components: {
   todoList
  },
  data() {
   return {
   };
  }
 }
</script>

2. 先看看组件的功能

首先我们先大体看看组件长啥样,然后我才去构思如何写

首先我们看到的是一个input输入框,默认显示edit..,当我们没有添加数据的时候,下方显示的“暂无内容”

vue组件编写之todolist组件实例详解 

接着,我们输入数据“第一个例子”然后敲击回车,就会出现一行list

list包括一个单选框,文字,还有一个删除的按钮

vue组件编写之todolist组件实例详解 

那怎么删除呢?那既然要做,肯定稍微做多一点功能,把一些内部指令都用一下,我们设置的删除规则是

先选中该list,然后点击删除,然后该条记录就没有了,如果删除这个数据后,就没有list了,那“暂无内容”就要显示出来了

vue组件编写之todolist组件实例详解

vue组件编写之todolist组件实例详解

3. 开始写我们的todo子组件了

关于代码中的样式我放在最后,所以此刻你可以忽略一些class

我们先把这个todolist的大体框架搭好,然后往里面增加功能

<template>
<div class="ex1">
  <div class="input-text">
 <label for="inputNum">请输入:</label>
 <input type="text" 
    id="inputNum" 
    name="inputNum" 
    placeholder="edit..">

 <!--列表内容-->
 <ul>
  <li>
   <input type="checkbox" >
   <span>dd</span>
   <button>删除</button>
  </li>
 </ul>
 <p class="empty" v-if="!inputList.length">暂无内容</p>
  </div>
</div>
</template>
<script>
 export default {
  data () {
   return {
    inputList: [],
    inputItem: {
     content: '',
  finished: false,
  deleted: false
 }
   }
  },
  methods: {
   //将输入框的数据添加到list中  
   addItem: function() {}
   //改变选中状态
   changeState: function(index) {},
   //删除列表元素
   deleteItem: function(index) {}
  }
 }
</script>

vue组件编写之todolist组件实例详解 

接下来我就不针对每一小步都给出代码来更新了,因为篇幅太大,我会更具一个功能块来写(我会很详细的)

首先我们先理清以下思路

在输入框中输入数据,按下回车就会在下方显示一行list列表(包括一个单选框,输入的数据,蓝色操作按钮)

将输入框的值和inputItem.content进行双向绑定

给输入框绑定回车事件(@keydown.13)到addItem方法中,每次输入回车,就将输入框的数据添加进list列表中(inputList数组中)

利用v-for指令遍历inputList中的值并显示

选中单选框,list的内容变成删除效果(中间横线划过),蓝色操作按钮变成红色删除按钮,点击按钮,就会删除该列list

将单选框的checked和inputItem的finished进行绑定,绑定后就可以利用这个finished来做一些别的事了

刚添加进列表内容的list的按钮是蓝色操作按钮,如果我们要通过单选框的选中与否的两种状态来使content的子添加和移除一个class(就是上面说的删除效果),以及将按钮变成红色的删除按钮,那就可以绑定changeState方法来操作

那删除功能呢?首先,我们要选中该行list,再点击删除才能删除该行数据,对吧。所以我们将按钮绑定一deleteItem方法,方法做的事情就是先检测该行的finished是否是true,如果是true,那么我们就删除该行数据

我们先完成添加功能:在输入框输入数据,回车,会在下面显示一行列表(包括单选框,输入的数据,删除按钮)

<template>
<div class="ex1">
  <div class="input-text">
 <label for="inputNum">请输入:</label>
 
  <!--@keydow.13表示回车的事件-->
  <!--v-model是为了让输入的数据和inputItem.content同步-->
  
  <input type="text" id="inputNum" name="inputNum" placeholder="edit.."
   @keydown.13="addItem" v-model="inputItem.content" class="edit"
  >
  <!--列表内容-->
  <ul class="task">
   <li v-for="(key, item) in inputList">
    <input type="checkbox" :checked="item.finished">
    <span>{{key.content}}</span>
    <button class="del">删除</button>
   </li>
  </ul>
 <p class="empty" v-if="!inputList.length">暂无内容</p>
  </div>
</div>
</template>
<script>
 export default {
  data () {...省略  },
  methods: {
   addItem: function() {
     this.inputList.push(this.inputItem);
     /*
     为什么我们要对inputItem再次初始化?
     解答:因为每次在输入框中输入数据,都会同时改变inputItem的content属性,
     然后我们点击回车,该inputItem的整个对象都添加进inputList中,
     按正常逻辑来说,inputList内的内容和inputItem是没有联系了。
     如果我们此时不对inputItem进行再次初始化,那么就会发现你再次在输入框中输入数据的时候,
     会同时改变下面的list的值,简易你们把初始化的代码去掉,运行下试试看!
     */
  this.inputItem = {
      content: '',
      finished: false,
      deleted: false
  };
   },
   //改变选中状态
   changeState: function(index) {},
   //删除列表元素
   deleteItem: function(index) {}
  }
 }
</script>

我们先看看列表内容的代码

<!--列表内容-->
<ul class="task">
 <li v-for="(item, index) in inputList">
  <!--单选框绑定了item.finished,还添加了点击事件-->
  <input type="checkbox"
  :checked="item.finished"
  @click="changeState(index)"
  >
  <!--通过item.finished值来动态绑定class-->
  <span :class="{'finish':item.finished}">{{item.content}}</span>
  <!--按钮的颜色通过动态添加class来实现,然后按钮的文本通过改变isDel来实现,isDel的改变也是通过changeState方法来操作的-->
  <button @click="deleteItem(index)"
   class="del"
   :class="{'native':item.finished === true}"
  >{{isDel}}</button>
 </li>
</ul>
<p class="empty" v-if="!inputList.length">暂无内容</p>

然后我们讲解changeState方法

//改变选中状态
   changeState: function (index) {
    // this.inputList[index].finished = true 错误:这样如果点击第二次,无法回到false,就会一直true状态
    this.inputList[index].finished = !this.inputList[index].finished;
    // 根据finished的值来对应的修改isDel的值,isDel的值就是按钮的文本
    if (this.inputList[index].finished) {
   this.isDel = '删除'
    }else {
     this.isDel = '操作'
 }
   },
//删除列表元素
   deleteItem: function (index) {
   if (this.inputList[index].finished) {
    his.inputList.splice(index,1);
   }
   }

总结

以上所述是小编给大家介绍的vue组件编写之todolist组件实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 开发规范要求(图文并茂)
Jun 11 Javascript
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
Javascript基础教程之数据类型转换
Jan 18 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
vue-cli3 配置开发与测试环境详解
May 17 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
基于openlayers4实现点的扩散效果
Aug 17 #Javascript
vue-cli启动本地服务局域网不能访问的原因分析
Jan 22 #Javascript
webpack引入eslint配置详解
Jan 22 #Javascript
jquery在启动页面时,自动加载数据的实例
Jan 22 #jQuery
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 #jQuery
JavaScript中EventLoop介绍
Jan 22 #Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 #Javascript
You might like
德生1994机评
2021/03/02 无线电
PHP header函数分析详解
2011/08/06 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
详谈python在windows中的文件路径问题
2018/04/28 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Python如何操作docker redis过程解析
2020/08/10 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
电子商务毕业生求职信
2013/11/10 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
员工福利申请报告
2015/05/15 职场文书
同乡会致辞
2015/07/30 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书