从无到有构建vue实战项目
Posted ktddcn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从无到有构建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+vue-router+axios+element-ui构建vue实战项目之七(渲染content.vue内容)
Vue实战Vue-cli项目构建(Vue+webpack系列之一)
Vue实战Vue-cli项目构建(Vue+webpack系列之一)