zoukankan      html  css  js  c++  java
  • 从无到有构建vue实战项目(八)

    十六、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. 需要注意的一点是,因为父传子是单向数据流,那么当父子共用的值在子组件里发生变化时,会产生一个错误,所以在子组件值发生变化时,也要更新父组件值

  • 相关阅读:
    Struts2-1.配置&与第一个应用
    1.rs.first()、rs.last()、rs.next()、rs.getRow()
    网页跳转
    js---DOM元素节点
    4、BufferedIn(out)putStream--->字节输入/输出流的缓冲区类(高效类:高效率读写)
    3、FileInputStream--->类文件输入流(读取文件数据)
    2、FileOutputStream--->文件输出流(向文件写入数据)
    1、IO输入&输出流 简介
    OutOfMemoryError系列
    Spark调优,性能优化
  • 原文地址:https://www.cnblogs.com/ktddcn/p/11438514.html
Copyright © 2011-2022 走看看