一、学习目标

  • 使用网络请求进行前后端交互 (重点)
  • 理解钩子函数的作用  (难点)
  • 掌握Vue.js过滤器的使用方法
  • 了解Vue.js事件的深入用法  (重点)

二、仿写留言板

2.1、实现"显示评论"按钮的功能

  • 使用网络请求,请求"请求列表" 数据
  • 解析 "评论列表" 数据
  • 展示"评论列表的数据"

2.2、点击显示评论,显示数据

说明:当我们点击评论的时候,则显示相关数据,测试第三方接口:http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187

  1. <body>
  2. <div id="box">
  3. <button @click="search">显示评论</button>
  4. <ul>
  5. <li v-for="item in arr">
  6. <h4>{{ item.commentTxt }}</h4>
  7. <p>{{ item.createAt | time }}</p>
  8. </li>
  9. </ul>
  10. </div>
  11. <script src="js/vue.js"></script>
  12. <script src="js/vue-resource.js"></script>
  13. <script>
  14. //定义过滤器
  15. Vue.filter('time',function(val){
  16. //只显示日期,不显示时间
  17. //方法:字符串的截取:substr(start,length)
  18. return val.substr(0,10);
  19. });
  20. var vm = new Vue({
  21. el: "#box",
  22. data: {
  23. arr: []
  24. },
  25. methods: {
  26. search: function(){
  27. this.$http.get("http://api.artgoer.cn:8084/artgoer/api/v1/user/324380" +
  28. "/v3/topic/topicHomeByLabel?pageIndex=1&" +
  29. "token=b544cd63-6d42-46fe-a96c-3cf96bae3113" +
  30. "&topicId=62187").then(
  31. function(res){
  32. //then()中如果只传入一个处理函数,那么默认是处理请求成功的情况
  33. //console.log(res.data);
  34. this.arr = res.data.data.commentList;
  35. })
  36. }
  37. }
  38. });
  39. </script>
  40. </body>

显示评论

2.3、无需点击,自动显示评论

说明:因为我们再显示评论的时候,一般情况下不需要任何操作,自动显示评论,所以我们就应该在 vue 对象创建之前 就应该加载这部分数据,所以我们就会使用到 beforeCreate的钩子。所以优化后的代码,如下:

  1. <body>
  2. <div id="box">
  3. <button>显示评论</button>
  4. <ul>
  5. <li v-for="item in arr">
  6. <h4>{{ item.commentTxt }}</h4>
  7. <p>{{ item.createAt | time }}</p>
  8. </li>
  9. </ul>
  10. </div>
  11. <script src="js/vue.js"></script>
  12. <script src="js/vue-resource.js"></script>
  13. <script>
  14. //定义过滤器
  15. Vue.filter('time',function(val){
  16. //只显示日期,不显示时间
  17. //方法:字符串的截取:substr(start,length)
  18. return val.substr(0,10);
  19. });
  20. var vm = new Vue({
  21. el: "#box",
  22. data: {
  23. arr: []
  24. },
  25. beforeCreate: function(){
  26. this.$http.get("http://api.artgoer.cn:8084/artgoer/api/v1/user/324380" +
  27. "/v3/topic/topicHomeByLabel?pageIndex=1&" +
  28. "token=b544cd63-6d42-46fe-a96c-3cf96bae3113" +
  29. "&topicId=62187").then( function(res){
  30. //then()中如果只传入一个处理函数,那么默认是处理请求成功的情况
  31. //console.log(res.data);
  32. this.arr = res.data.data.commentList;
  33. });
  34. }
  35. });
  36. </script>
  37. </body>

页面数据自动加载

小结:

  • 使用网络请求进行前后端交互
  • 理解钩子函数的作用 (难点)
  • 账务Vue.js过滤器的使用方法

三、仿写百度搜索框

3.1、Vue中事件对象的获取

语法:

  1. @click=fn($event)
  2. $event: 对象

实例:

  1. <body>
  2. <div id="box">
  3. <!--传入事件对象$event-->
  4. <div class="div1" @click="fn($event)"></div>
  5. </div>
  6. <script src="js/vue-resource.js"></script>
  7. <script src="js/vue.js"></script>
  8. <script>
  9. var vm = new Vue({
  10. el: "#box",
  11. data:{
  12. },
  13. methods: {
  14. fn: function(e){
  15. //e: event事件对象,e.clientX,e.clientY为 鼠标的坐标
  16. console.log(e.clientX,e.clientY);
  17. }
  18. }
  19. });
  20. </script>
  21. </body>

事件对象的获取

3.2、事件修饰符

概念:v-on指令提供了时间修饰符来处理DOM事件细节

按键修饰符:.enter,.up,.down 等等

prevent修饰符:阻止事件的默认行为

语法:

  1. <input type="text" @keydown.up="fn()" @keydown.down="fn2()"/> //按键按下后执行的事件

具体使用:

  1. <body>
  2. <div id="box">
  3. <input type="text" @keydown.up="fn1()"/>
  4. <input type="text" @keydown.down="fn2()"/>
  5. <!--
  6. 事件修饰符:vue中提供的处理DOM事件细节的方式
  7. 按键修饰符:.up,.down,.ctrl,.enter,.space....
  8. 语法:@click.修饰符='fn'
  9. -->
  10. </div>
  11. <script src="js/vue-resource.js"></script>
  12. <script src="js/vue.js"></script>
  13. <script>
  14. var vm = new Vue({
  15. el: "#box",
  16. data:{
  17. },
  18. methods: {
  19. fn1: function(){
  20. console.log("up");
  21. },
  22. fn2: function(){
  23. console.log("down");
  24. }
  25. }
  26. });
  27. </script>
  28. </body>

事件修饰符

3.3、仿写百度搜索框和练习

① 搜索需求:实现搜索框的搜索功能

  • 对用户在输入框内输入的值进行双向数据绑定。
  • 点击 "搜索" 按钮,进行网络请求
  • 将请求会的数据在搜索框下进行展示

②练习需求:实现通过方向键控制搜索选项

  • 绑定上下方向键的处理函数
  • 对展示的数据进行样式绑定
  1. <head>
  2. <meta charset="UTF-8">
  3. <title>Title</title>
  4. <style>
  5. .gary {background: #ccc;}
  6. </style>
  7. </head>
  8. <body>
  9. <div id="box">
  10. <input type="text" v-model="wd" @keydown.up.prevent="up" @keydown.down="down"/>
  11. <button @click="search">搜索</button>
  12. <ul>
  13. <li v-for="(item,index) in arr" :class="{gary: index==nowIndex}">{{ item }}</li>
  14. </ul>
  15. <!--
  16. 所有的li数据,都是自己的index
  17. 我们可以定义一个nowIndex来记录当前被选中的下标
  18. 比较index 和 nowIndex 的关系
  19. 如果 index==nowIndex,那么该条件数据是被选中的数据,也就是说北京变为灰色
  20. -->
  21. </div>
  22. <!--导入vue-resource.js,一定要在vue.js之后导入,不然会报错-->
  23. <script type="text/javascript" src="js/vue.js"></script>
  24. <script type="text/javascript" src="js/vue-resource.js"></script>
  25. <script>
  26. var vm = new Vue({
  27. el: "#box",
  28. data: {
  29. arr: [],
  30. wd: '',
  31. base_url: "https://sug.so.360.cn/suggest",
  32. nowIndex: -1
  33. },
  34. methods: {
  35. search: function(){
  36. this.$http.jsonp(this.base_url,{params: {word: this.wd}},{emulateJSON:true}).then(
  37. function(res){
  38. this.arr = res.data.s;
  39. }
  40. );
  41. },
  42. up: function(){
  43. this.nowIndex--;
  44. if(this.nowIndex < 0){
  45. this.nowIndex = this.arr.length -1;
  46. }
  47. },
  48. down: function(){
  49. this.nowIndex++;
  50. if (this.nowIndex > this.arr.length-1){
  51. this.nowIndex = -1;
  52. }
  53. }
  54. }
  55. });
  56. </script>
  57. </body>

仿写百度搜索框练习

这里面用到了一些事件修饰符。

3.4、事件执行机制

事件执行机制:

  • 根 -> 元素1 -> 元素2 -> 事件源(target)
  • 先捕获,后冒泡
  • 捕获:从根 到 事件源
  • 冒泡: 从事件源 到 根

示例:

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>Title</title>
  4. <style>
  5. div {width: 100px;height: 100px;}
  6. .div1 {background: pink;padding: 50px;}
  7. .div2 {background: yellow;}
  8. </style>
  9. </head>
  10. <body>
  11. <!--
  12. 事件执行机制:
  13. 根 -> 元素1 -> 元素2 -> 事件源(target)
  14. 先捕获,后冒泡
  15. 捕获:从根 到 事件源
  16. 冒泡: 从事件源 到 根
  17. -->
  18. <div id="box">
  19. <div class="div1" @click="fn1">
  20. <div class="div2" @click="fn2"></div>
  21. </div>
  22. </div>
  23. <script src="js/vue.js"></script>
  24. <script>
  25. var vm = new Vue({
  26. el: "#box",
  27. data: {},
  28. methods: {
  29. fn1: function(){
  30. console.log("fn1");
  31. },
  32. fn2: function(){
  33. console.log("fn2");
  34. }
  35. }
  36. });
  37. </script>
  38. </body>

事件执行机制

结果:

  1. >>>fn2
  2. >>>fn1

结果得出:事件执行是 从 源 到 根依次执行,那我执行事件源,不想执行 除事件源之外的 事件,如下:stop:阻止冒泡

  1. <div class="div2" @clicl.stop="fn2"></div>

更多事件处理:

事件处理:https://cn.vuejs.org/v2/guide/events.html

事件修饰符:https://cn.vuejs.org/v2/guide/events.html#事件修饰符

按键修饰符:https://cn.vuejs.org/v2/guide/events.html#按键修饰符

四、小结

  • 重点:能够使用网络请求进行前后端交互
  • 难点: 理解钩子函数的作用
  • 注意事项:修饰符可以串联使用:@click.prevent.stop="fn"。

第5章-Vue.js交互及生命周期练习的更多相关文章

  1. 第4章-Vue.js 交互及实例的生命周期

    一.学习目标 了解实例生命周期的过程 理解钩子函数的作用 掌握Vue.js过滤器的使用方法 (重点) 能够使用网络请求进行前后端交互 (重点.难点) 二.交互的基本概念 2.1.前端和后端的概念 说明 ...

  2. Vue.js系列:生命周期钩子

    开发人员提供了一个Web开发人员可以在Vue.js应用程序的整个生命周期中使用的各种方法的讨论. 生命周期钩子是在Vue对象生命周期的某个阶段执行的已定义方法.从初始化开始到它被破坏时,对象都会遵循不 ...

  3. 【Vue.js学习】生命周期及数据绑定

    一.生命后期 官网的图片说明: Vue的生命周期总结 var app = new Vue({ el:"#app", beforeCreate: function(){ consol ...

  4. Vue.js 2.0生命周期

    1.beforeCreate 组建实例刚被创建,属性和方法等都还没有 2.created         实例已经创建完成,属性已经绑定 3.beforeMount  模板编译之前 4.mounted ...

  5. vue基本配置和生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

  6. 多个Activity交互的生命周期:

    一.多个Activity交互的生命周期: A Activity打开B Activity的时候:        A Activity                    B Activity     ...

  7. Vue2.5笔记:Vue的实例与生命周期

    理解与认识 Vue 的实例是我们学习 Vue 非常重要的一步,也是非常必须的,因为实例是它的一个起点,也是它的一个入口,只有我们创建一个 Vue 实例之后,我们才行利用它进行一些列的操作. 首先 Vu ...

  8. 第3章-Vue.js 指令扩展 和 todoList练习

    一.学习目标 了解Vue.js指令的实现原理 理解v-model指令的高级用法 能够使用Vue.js 指令完成 todoList 练习(重点+难点) 二.todoList练习效果展示 2.1.效果图展 ...

  9. 第2章-Vue.js指令

    一.学习目标 了解 什么 是 Vue.js 指令 理解 Vue.js 指令的 用途 掌握 Vue.js 指令的书写规范 能够 使用 Vue.js 指令完成部门页面交互效果(难点和重点) 二.指令的基本 ...

随机推荐

  1. Java反编译插件

    一.eclipse->help->Eclipse Marketplace 如下图:搜索JadClipse,install进行下载安装,

  2. BZOJ 1901 Zju2112 Dynamic Rankings 树状数组套线段树

    题意概述:带修改求区间第k大. 分析: 我们知道不带修改的时候直接上主席树就可以了对吧?两个版本号里面的节点一起走在线段树上二分,复杂度是O((N+M)logN). 然而这里可以修改,主席树显然是凉了 ...

  3. 20181016-4 Alpha阶段第1周/共2周 Scrum立会报告+燃尽图 02

    此次作业要求参见 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2247] Scrum master:祁玉 一.小组介绍 组长:王一可 ...

  4. 第16次Scrum会议(10/28)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/28 17:20~17:32,总计12min.地点:东北师范 ...

  5. Bate版本控制报告

    报告beta阶段2周中,项目的版本控制情况,不包括未在coding.net的部分. 包括不限于:check in (不是push)次数; 总词数为29次 check in log(时间.人员.mess ...

  6. Python:字符串操作总结

    所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最小值最大值)对字符串同样适用,且字符串是不可变的. 一.字符串格式化 转换说明符 [注]: 这些项的顺序至关重要 (1)%字符:标记转换 ...

  7. [图算法] 1003. Emergency (25)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  8. Java package

    Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起.这个名称空间就是包名.可以使用import关键字来导入一个包.例如使用import java.util.* ...

  9. EF 联合查询

    EF 文章表和标签表联合查询标签id在dis中的文章,还不知道性能如何 var query = tagRepo.Entities.Include("Tags").Where(t = ...

  10. 关于初装kali linux 2.0时DEB文件安装失败的问题

    kali linux 是一个基于debian 的linux发行版本,支持deb文件格式的图形化安装. 刚装上kali linux时安装程序总是失败,提示处理时错误. 经过一番爬贴,是软件源的原因,解决 ...