十六、vue-lazyload的使用

  1. 首先,我们需要下载vue-lazyload包:

    npm i vue-lazyload -S
  2. 下载好之后,我们将它引入到自己的项目:

    //main.js
    //引入图片懒加载
    import VueLazyload from 'vue-lazyload'
    //vue-lazyload配置
    Vue.use(VueLazyload, {
    preLoad: 1.3,
    //发生错误时显示的图片
    error: require("./assets/error.gif"),
    //加载过程中用到的图片
    loading: require("./assets/loading.gif"),
    attempt: 1
    })
    1. 需要注意的一点是,由于webpack打包机制,和js编译原因,在动态引入图片时,要选择require方式,require 是 AMD规范引入方式,如果不用require引入,代码运行到此处时,只会将图片路径识别为普通字符串,而用require方式,则代码运行到此处时则会解析该字符串,并将解析值赋给该对象或者变量
  3. 然后在需要用到懒加载的img标签上,将:src替换为v-lazy,然后加上:key,其中v-lazy和:key的参数一样,然后就可以看到效果了

十七、对element-ui日历的修改以及实现签到功能

  1. 创建一个组件,calendar.vue,该组件为子组件,然后将其引入父组件forum.vue

  2. calendar.vue代码如下:

    <template>
    <div id="calendar">
    <div class="calendar-wrapper">
    <el-dialog title="签到" @closed="closeDialog" width="30%" :visible.sync="isDialog">
    <el-calendar v-model="checkInDate">
    <!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
    <template class="selectCalendar" slot="dateCell" slot-scope="{date, data}">
    <p
    class="calendarContent"
    @click="checkIn(date,data)"
    :class="data.isSelected ? 'is-selected' : ''"
    >{{ data.day.split('-').slice(1).join('-') }} {{(data.isSelected) ? '✔️' : ''}}</p>
    </template>
    </el-calendar>
    </el-dialog>
    </div>
    </div>
    </template>
    <script>
    import { Message } from "element-ui";
    export default {
    name: "calendar",
    data: function() {
    return {
    isDialog: this.dialogCalendar,
    checkInDate: new Date(),
    activeDate: [
    "2019-08-19",
    "2019-08-20",
    "2019-08-21",
    "2019-08-22",
    "2019-08-23"
    ],
    selectDate: ""
    };
    },
    props: {
    dialogCalendar: {
    type: Boolean,
    default: false
    }
    },
    //监听从父组件传递给子组件的dialogCalendar的值,以便更新isDialog,解决props单向数据流报错的问题
    watch: {
    dialogCalendar: function(newVal) {
    this.isDialog = newVal;
    }
    },
    methods: {
    closeDialog: function() {
    //通过调用内建的$emit方法,传入事件名称和数据来改变父组件数据
    this.$emit("listenDialog", false);
    },
    checkIn: function(date, data) {
    let day1 = new Date();
    console.log(day1.getDate(), date.getDate(), data);
    if (date.getDate() == day1.getDate()) {
    Message.success({ message: "签到成功!", offset: 90 });
    } else {
    Message.warning({ message: "签到失败!", offset: 90 });
    }
    },
    }
    };
    </script>
    <style lang="scss">
    .is-selected {
    color: #1989fa;
    }
    #calendar {
    .el-calendar__body {
    padding: 12px 20px 10px;
    }
    .el-dialog__body {
    padding: 0px 20px;
    color: #606266;
    font-size: 14px;
    word-break: break-all;
    }
    .el-calendar-day {
    height: 50px;
    }
    }
    </style>
  3. forum.vue代码如下:

    ...
    <el-button type="success" plain @click="checkIn">每日签到</el-button>
    <calendar :dialogCalendar="post.dialogCalendar" @listenDialog="changeDialog"></calendar>
    ...
    post: {
    dialogCalendar: false,
    }
    ...
    methods: {
    //签到
    checkIn: function() {
    this.post.dialogCalendar = !this.post.dialogCalendar;
    console.log(this.post.dialogCalendar)
    },
    //通过接收子组件传值来改变父组件数据
    changeDialog: function(data) {
    this.post.dialogCalendar = data;
    console.log(data)
    }
    }
  4. 需要注意的一点是,因为父传子是单向数据流,那么当父子共用的值在子组件里发生变化时,会产生一个错误,所以在子组件值发生变化时,也要更新父组件值

从无到有构建vue实战项目(八)的更多相关文章

  1. 从无到有构建vue实战项目(四)

    六.webpack的安装和配置 为了快速构建vue项目,webpack是一个必不可少的工具,我们先来安装它,附上官网地址:https://www.webpackjs.com/ 要安装最新版本或特定版本 ...

  2. 从无到有构建vue实战项目(一)

    vue的安装 首先下载nodehttp://nodejs.cn/download/ 有两种安装方式安装包安装和二进制文件安装 输入以下命令,出现版本提示表示安装成功: node -v 10.15.3 ...

  3. 从无到有构建vue实战项目(二)

    二.vue项目的初步搭建 该项目我采用了当下最流行的vue ui框架---element-ui,首先用vue-cli构建一个vue项目: vue create education 然后会出现一系列配置 ...

  4. 从无到有构建vue实战项目(五)

    八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...

  5. 从无到有构建vue实战项目(三)

    四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...

  6. 从无到有构建vue实战项目(六)

    十.徒手撸一个vue下拉左侧二级导航 先附上最终效果图: vue代码: <div class="dropdown-menu-explore" v-on:mouseover=& ...

  7. 从无到有构建vue实战项目(七)

    十四.Vuex的使用 Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vu ...

  8. Vue 实战项目: 硅谷外卖(1)

    第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新 ...

  9. Vue 实战项目开发流程

    一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...

随机推荐

  1. arm汇编指令--str ldr

    STR :把寄存器中的字保存到存储器(寄存器到存储器) 示例: STR R0,[R1],#8             :将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.STR ...

  2. lr参数化

    为什么做参数化? 数据库校验:注册用户时会看数据库有没有这个账号 应用程序校验:pc端qq登陆,一个账号只能登陆一台电脑 1.数据库或应用程序提交值的唯一性校验 数据库查询过程: 1.语法检查.语义检 ...

  3. rabbitMQ_routing(四)

    路由 本次我们将通过路由将信息发送到指定的队列中,将消息发送给指定的队列需要在转发器和队列之间建立一个routeKey 绑定 在以前的例子中,我们已经创建了绑定.你可能会记得如下代码: channel ...

  4. Mybatis与Spring集成时都做了什么?

    Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和S ...

  5. oracle 断电启动失败:ORA-00600: internal error code, arguments

    转载地址: http://www.2cto.com/database/201312/261602.html 由于服务器断电,启动 oracle 时报 ORA-00600 错误 查看 oracle tr ...

  6. IBM实习工作(一)

    2019.1.21 今天的任务是完成会计是否在岗配置表格增加操作记录,任务描述:1.  [会计是否在岗配置] 查询结果界面: 修改人编码/修改人/修改时间 字段:2.      字段取值为[会计是否在 ...

  7. red hat enterprise Linux 64 bit 配置IP

    在win7 64位操作系统的台式机器上,安装了VMware® Workstation,9.0.1 build-894247.新建一个虚拟机安装linux.具体过程请搜索相关文档.安装的时候选择的网络连 ...

  8. Linux软件的安装

    yum -y groups install "GNOME Desktop"  安装桌面系统startx  安装完成后输入指令进入到桌面化指令 安装tomcat sudo yum i ...

  9. io流处理文件夹复制功能(java代码)

    拷贝某个目录下得所有文件拷指定位置 思想归纳 首先我们需要做的先获取到资源文件夹路径,这里我们先在程序中写死,然后我们还需要一个目标文件夹就是你需要拷贝到哪里.有了这两个文件夹我就可以进行复制了 然后 ...

  10. 强烈推荐优秀的Vue UI组件库

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...