展现自己小技能

125 阅读3分钟

技能四十一 举例说出$set 的应用场景

当我们使用Vue框架开发Web应用时,我们经常需要动态地添加或删除一个数组元素或者一个对象属性,这时就可以使用 $set 方法实现响应式更新。以下是 $set 可以应用的场景:

1. 向数组添加一个新元素

// 假设arr是Vue组件实例中的一个响应式数组,想要添加一个新的元素
this.$set(this.arr, this.arr.length, 'new element')

javascript复制代码

2. 动态为对象添加一个属性

// 假设obj是Vue组件实例中的一个响应式对象,现在需要为其添加一个新属性
this.$set(this.obj, 'newProperty', 123)

javascript复制代码

3. 在循环中动态更新数组中的某个元素

// 假设arr是Vue组件实例中的一个响应式数组,并且需要在某个循环中更新数组的某个元素
this.$set(this.arr, index, newValue)

javascript复制代码

总而言之,任何时候需要在Vue应用中动态地添加或删除数组元素或者对象属性时,都可以使用 $set 方法实现响应式更新。

技能四十二 通过blob的方式下载文件

Blob的方式下载文件,需要以下步骤:

  1. 创建一个Blob对象,其中包含所需的文件数据。
  2. 将Blob对象的URL作为下载链接的href属性。
  3. 用download属性指定文件名。
  4. 创建一个新的链式调用,单击链接自动启动下载。

以下是一个简单的示例代码:

// 文件数据
const fileData = 'Hello, world!';

// 创建Blob对象
const blob = new Blob([fileData], { type: 'text/plain' });

// 创建下载链接
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'file.txt';

// 单击链接自动启动下载
link.click();

javascript复制代码

这会将文件数据存储在Blob对象中,然后将Blob对象的URL用作下载链接的href属性,指定下载文件的文件名为“file.txt”,最后单击链接自动启动下载。

技能四十三 理解添加和编辑使用一个组件的基本流程

添加和编辑使用一个组件的基本流程如下:

  1. 创建一个通用组件,该组件用于添加或编辑特定数据的表单输入框、单选按钮、复选框、下拉列表等表单元素,以及用于提交或组件中使用该通用组件,数据和回调函数。例如,如果是编辑操作,则向件中显示错误消息。
  2. 可以添加表单验证逻辑,以确保用户输入的数据这可以在表单提交之前进行验证,并在验证失败时向用户显示编辑模式”)来显示表单。这可以在组件内部通过props中的数据不同的表单内容。

总之,添加和编辑使用一个组件的基本流程是在定义表单元素和逻辑,然其回调函数,编辑操作。

以下是一个添加和编辑使用一个组件的示例代码,其中包含了一些常见的表单元素和表单验证逻辑:

<template>
  <form class="form" @submit.prevent="handleSubmit">
    <input type="text" v-model.trim="name" required placeholder="Name" />
    <input type="email" v-model.trim="email" :class="{ error: !isEmailValid }" placeholder="Email" />
    <input type="password" v-model.trim="password" minlength="6" placeholder="Password" />
    <div>
      <label>
        <input type="radio" v-model="gender" value="male" />
        Male
      </label>
      <label>
        <input type="radio" v-model="gender" value="female" />
        Female
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" v-model="termsAccepted" required />
        I agree to the terms and conditions
      </label>
    </div>
    <button type="submit">{{ formMode === "add" ? "Add" : "Update" }}</button>
  </form>
</template>

<script>
export default {
  props: {
    formMode: { type: String, required: true },
    initialData: {
      type: Object,
      default: () => ({
        name: "",
        email: "",
        password: "",
        gender: "",
        termsAccepted: false,
      }),
    },
    onSubmit: { type: Function, required: true },
  },
  data() {
    return {
      name: this.initialData.name,
      email: this.initialData.email,
      password: this.initialData.password,
      gender: this.initialData.gender,
      termsAccepted: this.initialData.termsAccepted,
    };
  },
  computed: {
    isEmailValid() {
      const emailRegex = /^[^\s@]+@[^\s@]+.[^\s@]+$/;
      return emailRegex.test(this.email);
    },
  },
  methods: {
    handleSubmit() {
      if (this.termsAccepted && this.isEmailValid) {
        const formData = {
          name: this.name,
          email: this.email,
          password: this.password,
          gender: this.gender,
        };
        this.onSubmit(formData);
      }
    },
  },
};
</script>

<style>
.error {
  border-color: red;
}
</style>

vue复制代码

在这个示例代码中,表单包含了一个文本输入框、一个电子邮件输入框、一个密码输入框、一个单选按钮组和一个复选框。表单数据通过v-model进行双向绑定,表单验证逻辑使用了computed计算属性进行计算,以确保用户输入的数据的合法性。

此外,这个组件还接收了三个props:formMode,initialData和onSubmit分别用于确定组件的功能模式(添加或编辑),初始数据和提交表单的回调函数。最后,使用handleSubmit方法,将处理成功填的数据传递给实际提交表单的回调函数onSubmit

技能四十四 实现文件的拖拽上传

要实现文件拖拽上传功能,可以在HTML中使用<input type="file">,然后用JavaScript访问DOM元素并添加事件监听器。

以下是一个基本的示例代码,演示如何实现文件拖拽上传:

<!DOCTYPE html>
<html>
<head>
  <title>Drag and Drop File Upload</title>
</head>
<body>
  <div id="drop-area" style="border: 2px dashed black; padding: 20px;">
    <p>Drag and drop files here or click to select files</p>
    <input type="file" id="file-input" style="display: none;">
  </div>

  <script>
    const dropArea = document.getElementById('drop-area');

    // 拖拽事件监听器
    ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
      dropArea.addEventListener(eventName, preventDefaults, false)
    });

    // 防止浏览器默认打开文件
    function preventDefaults (e) {
      e.preventDefault()
      e.stopPropagation()
    }

    // 改变背景颜色以提示用户
    ['dragenter', 'dragover'].forEach(eventName => {
      dropArea.addEventListener(eventName, highlight, false)
    })

    // 移除背景颜色提示
    ['dragleave', 'drop'].forEach(eventName => {
      dropArea.addEventListener(eventName, unhighlight, false)
    })

    // 处理文件拖拽上传
    dropArea.addEventListener('drop', handleDrop, false)

    function highlight(e) {
      dropArea.style.background = 'lightgray'
    }

    function unhighlight(e) {
      dropArea.style.background = 'white'
    }

    function handleDrop(e) {
      const dt = e.dataTransfer
      const files = dt.files

      handleFiles(files)
    }

    // 处理文件选择上传
    const fileInput = document.getElementById('file-input')
    fileInput.addEventListener('change', e => {
      const files = e.target.files
      handleFiles(files)
    })

    function handleFiles(files) {
      for (let i = 0; i < files.length; i++) {
        uploadFile(files[i])
      }
    }

    // 异步上传文件
    function uploadFile(file) {
      const url = 'YOUR_UPLOAD_URL'
      const xhr = new XMLHttpRequest()
      const formData = new FormData()
      xhr.open('POST', url, true)
      xhr.addEventListener('readystatechange', e => {
        if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
          console.log('File uploaded successfully!')
        }
      })
      formData.append('file', file)
      xhr.send(formData)
    }
  </script>
</body>
</html>

html复制代码

在这个示例代码中,我们在<div>元素上定义了dragenterdragoverdragleavedrop事件的监听器。通过preventDefault()stopPropagation()方法,阻止浏览器默认打开文件的行为,并在文件被拖拽或悬停在元素上时改变背景颜色以提示用户。当文件被拖到上传区域并被释放时,drop事件会被触发,然后我们通过handleFiles()函数遍历每个文件,然后调用uploadFile()函数将文件上传到指定的URL。在uploadFile()函数中,我们使用XMLHttpRequest异步上传文件,并在上传成功时进行回调处理。

技能四十五 导出文件为pdf格式

要将文件导出为PDF格式,您可以使用JavaScript库jsPDF。这是一个开源库,可以在许多不同的平台上使用,可以从它的官方网站上下载和使用。通过以下步骤,您可以轻松地将HTML元素转换为PDF格式并将其保存到您的计算机上:

  1. 在HTML文件中导入jsPDF库。您可以在HTML文件的head部分中使用以下代码导入:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.3.1/jspdf.umd.min.js"></script>

复制代码

请确保将版本号更改为当前可用的版本号。

  1. 在需要导出为PDF的HTML元素上添加一个“id”。例如,在一个名为“mydiv”的元素上,可以添加以下代码:
<div id="mydiv">This is the content to be exported to PDF</div>

复制代码
  1. 使用以下JavaScript代码将元素导出为PDF并将其保存到您的计算机上:
// 获取需要导出为PDF的HTML元素
const element = document.getElementById("mydiv");

// 创建新的jsPDF实例对象
const pdf = new jsPDF();

// 将HTML元素转换为图像加入到PDF中
pdf.html(element, {
  callback: function () {
    // 保存PDF文件到计算机中
    pdf.save("filename.pdf");
  },
});

复制代码

请注意,在上面的代码示例中,我们先使用document.getElementById()方法获取要导出为PDF的HTML元素。接下来,我们使用“new jsPDF ()”创建一个新的jsPDF实例对象。然后,我们使用pdf.html()方法将HTML元素转换为图像并将其添加到PDF中。最后,在回调函数中,我们使用pdf.save()方法将PDF文件保存到计算机中。