从无到有构建vue实战项目(八)
十六、vue-lazyload的使用
首先,我们需要下载vue-lazyload包:
npm i vue-lazyload -S
下载好之后,我们将它引入到自己的项目:
//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
})
- 需要注意的一点是,由于webpack打包机制,和js编译原因,在动态引入图片时,要选择require方式,require 是 AMD规范引入方式,如果不用require引入,代码运行到此处时,只会将图片路径识别为普通字符串,而用require方式,则代码运行到此处时则会解析该字符串,并将解析值赋给该对象或者变量
然后在需要用到懒加载的img标签上,将:src替换为v-lazy,然后加上:key,其中v-lazy和:key的参数一样,然后就可以看到效果了
十七、对element-ui日历的修改以及实现签到功能
创建一个组件,calendar.vue,该组件为子组件,然后将其引入父组件forum.vue
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>
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)
}
}
需要注意的一点是,因为父传子是单向数据流,那么当父子共用的值在子组件里发生变化时,会产生一个错误,所以在子组件值发生变化时,也要更新父组件值
从无到有构建vue实战项目(八)的更多相关文章
- 从无到有构建vue实战项目(四)
六.webpack的安装和配置 为了快速构建vue项目,webpack是一个必不可少的工具,我们先来安装它,附上官网地址:https://www.webpackjs.com/ 要安装最新版本或特定版本 ...
- 从无到有构建vue实战项目(一)
vue的安装 首先下载nodehttp://nodejs.cn/download/ 有两种安装方式安装包安装和二进制文件安装 输入以下命令,出现版本提示表示安装成功: node -v 10.15.3 ...
- 从无到有构建vue实战项目(二)
二.vue项目的初步搭建 该项目我采用了当下最流行的vue ui框架---element-ui,首先用vue-cli构建一个vue项目: vue create education 然后会出现一系列配置 ...
- 从无到有构建vue实战项目(五)
八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...
- 从无到有构建vue实战项目(三)
四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...
- 从无到有构建vue实战项目(六)
十.徒手撸一个vue下拉左侧二级导航 先附上最终效果图: vue代码: <div class="dropdown-menu-explore" v-on:mouseover=& ...
- 从无到有构建vue实战项目(七)
十四.Vuex的使用 Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vu ...
- Vue 实战项目: 硅谷外卖(1)
第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新 ...
- Vue 实战项目开发流程
一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...
随机推荐
- Linux系统安装Tomcat——.tar.gz版
1.rpm.deb.tar.gz的区别: rpm格式的软件包适用于基于Red Hat发行版的系统,例如Red Hat Linux.SUSE.Fedora. deb格式的软件包则是适用于基于Debian ...
- Java程序员注意——审查Java代码的六种常见错误
代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效.由于代码审查本身所针对的对象,就是俯瞰整个代码在测试过程中的问题和Bug.并且,代码审查对消除一些特别细节的错误大有裨益,尤其是那 ...
- nl2br()处理字符串中的换行符
nl2br() 函数 在字符串中包含换行符时,需要对其进行转换,php 中有str_replace()函数,可以直接对字符串进行替换处理.但php中还有nl2br()函数可以直接处理. 1.在字符串中 ...
- 下载Opencv和OpencvSharp,让我们开始图像之旅
我们学习和使用OpencvSharp,还下载Opencv干什么?很简单,研究人家的源码是最好和最快速的学习方式. 第一Opencv源码下载,网络上很多,请大家自行搜索,版本请下载4.1.0.当前你要用 ...
- pycharm remote debug
换工作了好久没写blog了,堕落了,哈哈,发现了好的东西分享一下,和以前使用的pycharm的远程debug相比,更为方便,原理同步本地和远程的代码,加载远程的环境运行,使用本地的代码+远程的环境,方 ...
- Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)
简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...
- Codeforces1144D(D题)Equalize Them All
D. Equalize Them All You are given an array aa consisting of nn integers. You can perform the follow ...
- 手撸PHP数据库连接
最近这个月过得确实有点狼狈....不停地复习,看书..终于到今天为止考完了2科了.能让我好好地写写博客了..前段时间的PHP课设我多学了点东西,在我们一般老师讲的php连接数据库方面做了一些优化.前段 ...
- chapter02 - 03
1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? 答:cat /etc/ssh/sshd_conf ...
- vue history模式下出现空白页情况
问题描述: vue搭建的项目,路由一直用的hash模式,所以url中都会带有一个“#”号.现在想要去掉“#”,于是使用history模式 { mode: 'history' },代码如下: imp ...