分享5个关于 Vue 的小知识,希望对你有所帮助(三)

大家好,上两篇文章《分享5个关于 Vue 的小知识,希望对你有所帮助(一)》《分享5个关于 Vue 的小知识,希望对你有所帮助(二)》,今天我们继续分享5个关于 Vue 的小知识,希望对你有所帮助。

1、使用Vue.js滚动到一个元素

63bae2cbfb891bd2d9f330e0d7f710b9.png

我们可以通过为想要滚动到的元素分配一个引用来使用Vue.js滚动到该元素然后,我们可以在分配给引用的元素上调用scrollIntoView方法来滚动到该元素。例如,我们可以编写:

<template>
  <div id="app">
    <button @click="scrollToElement">scroll to last</button>
    <p v-for="n of 100" :key="n" :ref="n === 100 ? 'last' : undefined">
      {
    
    { n }}
    </p>
  </div>
</template>
<script>
export default {
  name: "App",
  methods: {
    scrollToElement() {
      const [el] = this.$refs.last;
      if (el) {
        el.scrollIntoView({ behavior: "smooth" });
      }
    },
  },
};
</script>

我们有一个名为scrollToElement的按钮,用于调用该方法。然后我们有一些p元素,其中最后一个引用被分配给最后一个p元素。在scrollToElement方法中,我们通过解构使用this.$refs.last获取分配给最后一个引用的元素。然后我们调用el.scrollIntoView,并使用一个具有behavior属性的对象来更改滚动行为。

2、如何在Vue.js组件中监听窗口滚动事件?

我们可以调用window.addEventListener方法来监听浏览器窗口上的滚动事件,以此来在Vue.js组件中监听窗口滚动事件。

例如,我们可以写成这样:

<template>
  <div id="app">
    <p v-for="n of 100" :key="n">{
    
    { n }}</p>
  </div>
</template>
<script>
export default {
  name: "App",
  created() {
    window.addEventListener("scroll", this.handleScroll);
  },
  destroyed() {
    window.removeEventListener("scroll", this.handleScroll);
  },
  methods: {
    handleScroll(event) {
      console.log(window.scrollY);
    },
  },
};
</script>
  • 我们在created钩子中调用window.addEventListener方法并传递'scroll'参数来添加handleScroll滚动事件监听器,以便在组件挂载时监听滚动事件。

  •  在destroyed钩子中,我们调用window.removeEventListener方法来移除handleScroll滚动事件监听器。

  • 在handleScroll方法中,我们使用window.scrollY属性获取垂直滚动位置。

  • 在模板中,我们有一些可滚动的内容。如果我们通过它滚动,应该看到记录了scrollY的值。

3、如何在页面加载时调用Vue.js方法?

a89d2fadc413bdc14ebf6930c180a968.jpeg

我们可以在页面加载时通过在 beforeMount 组件钩子中调用Vue.js方法来调用它。

例如,我们可以写:

<template>
  <div id="app"></div>
</template>
<script>
export default {
  name: "App",
  methods: {
    getUnits() {
      //...
    },
  },
  beforeMount() {
    this.getUnits();
  },
};
</script>

将 getUnits 方法添加到 methods 属性中。

我们在 beforeMount 钩子中调用 this.getUnits 。

this.getUnits 是 methods 对象属性中的 getUnits 方法。

我们还可以通过在 created 钩子中调用方法来在页面加载时运行它:

<template>
  <div id="app"></div>
</template>
<script>
export default {
  name: "App",
  methods: {
    getUnits() {
      //...
    },
  },
  created() {
    this.getUnits();
  },
};
</script>

我们可以在 mounted 钩子中做同样的事情:

<template>
  <div id="app"></div>
</template><script>
export default {
  name: "App",
  methods: {
    getUnits() {
      //...
    },
  },
  mounted() {
    this.getUnits();
  },
};
</script>

当使用 Vue.js 构建一个应用时,Vue.js 会把组件按照一定的生命周期顺序初始化。在这个初始化过程中,每个组件实例都会依次经历一些特定的初始化和销毁过程,这些过程就是组件的生命周期。

Vue.js 提供了一些钩子函数(也称为生命周期函数),在组件生命周期的不同阶段会依次执行这些钩子函数。

beforeMount、created 和 mounted 都是 Vue.js 组件生命周期的钩子函数,它们的主要区别和用法如下:

1. created 钩子函数

created 钩子函数会在组件实例被创建之后立即调用,这个时候组件的数据观测和事件机制都已经初始化完成了。

在这个阶段,我们可以执行一些初始化的操作,比如对组件的数据进行初始化、对组件的属性进行设置、对组件的状态进行初始化等等。

2. beforeMount 钩子函数

beforeMount 钩子函数会在模板编译之后,但是在挂载之前被调用。在这个阶段,Vue.js 已经把组件的模板编译成了一个渲染函数,并且将渲染函数和组件实例关联起来了。

在这个阶段,我们可以进行一些 DOM 操作,比如修改 DOM 元素的样式、属性、子元素等等。但是需要注意的是,此时组件还没有被挂载到 DOM 上,因此对于一些需要获取 DOM 元素尺寸、位置等信息的操作应该放到 mounted 钩子函数中执行。

3. mounted 钩子函数

mounted 钩子函数会在组件挂载到 DOM 上之后被调用。在这个阶段,Vue.js 已经将组件实例挂载到了指定的 DOM 元素上,并且执行了一次渲染。

在这个阶段,我们可以访问到组件的 DOM 元素,并且执行一些需要访问 DOM 元素的操作,比如获取 DOM 元素的尺寸、位置等等。此外,mounted 钩子函数也是与第三方库进行交互的好时机,因为此时 DOM 元素已经被渲染出来了。

总之,这三个钩子函数都是 Vue.js 组件生命周期的钩子函数,它们分别在组件实例被创建后、模板编译后挂载前、挂载后被调用,用于执行不同的逻辑操作。

4、在Vue.js中按下回车键时执行某些操作

4c95f47430571a8929db6640e56df80c.png

我们可以通过在执行某些操作的元素上添加 v-on:keyup 指令来在按下回车键时执行某些操作。

例如,我们可以编写以下代码:

<template>
  <div id="app">
    <input v-on:keyup.enter="onEnter" />
  </div>
</template>
<script>
export default {
  name: "App",
  methods: {
    onEnter() {
      console.log("pressed enter");
    },
  },
};
</script>

我们使用 enter 修饰符添加 v-on:keyup 指令来监听回车键的按下。

我们将其值设置为 onEnter 方法,以便在聚焦到输入框并按下回车键时运行它。

此外,我们可以使用 @ 来代替 v-on: 来稍微简化代码。

具体来说,我们可以编写以下代码:

<template>
  <div id="app">
    <input @keyup.enter="onEnter" />
  </div>
</template>
<script>
export default {
  name: "App",
  methods: {
    onEnter() {
      console.log("pressed enter");
    },
  },
};
</script>

无论使用哪个示例,当我们聚焦到输入框并按下回车键时,都应该看到“pressed enter”被输出到日志中。

5、如何在应用程序中为移动浏览器显示不同的内容?

8be1a418f57a8ed08b4b80c668360d59.jpeg

有时候,我们希望在Vue.js应用中为移动浏览器展示不同的内容。

我们可以通过检查浏览器的用户代理来确定浏览器是否为移动浏览器,并相应地显示内容,在Vue.js应用程序中为移动浏览器显示不同的内容。

例如,我们可以写:

<template>
  <div id="app">
    <div v-if="!isMobile()">desktop</div>
    <div v-else>mobile</div>
  </div>
</template>
<script>
export default {
  name: "App",
  methods: {
    isMobile() {
      return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
        navigator.userAgent
      );
    },
  },
};
</script>

我们添加了一个方法,该方法检查 isMobile 字符串属性,以查看它是否包含任何移动浏览器的关键字。

然后在模板中,我们调用 v-if 指令中的 isMobile 方法来判断浏览器是否为非移动设备。

如果不是,则显示“desktop”,否则使用 v-else 指令显示“mobile”。

此外,我们可以检查屏幕的宽度,并相应地显示内容。例如,我们可以写成:

<template>
  <div id="app">
    <div v-if="!isMobile">desktop</div>
    <div v-else>mobile</div>
  </div>
</template><script>
export default {
  name: "App",
  data() {
    return {
      isMobile: true,
    };
  },
  mounted() {
    this.onResize();
    window.addEventListener("resize", this.onResize, { passive: true });
  },
  methods: {
    onResize() {
      this.isMobile = window.innerWidth < 600;
    },
  },
  beforeDestroy() {
    if (typeof window !== "undefined") {
      window.removeEventListener("resize", this.onResize, { passive: true });
    }
  },
};
</script>

我们使用 addEventListener 来监听 'resize' 的resize事件。

如果触发了,那么我们就运行 onResize 方法,根据屏幕大小设置 isMobile 响应式属性。

如果 window.innerWidth 小于600,则将其设置为 true 。

否则,我们将其设置为 false 。

在 beforeDestroy 钩子中,我们调用
window.removeEventListener 来移除resize事件监听器。

结束

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

粉丝福利

分享 9 个常用的 TailwindCSS 卡片模板源码,喜欢的赶紧下载收藏吧

猜你喜欢

转载自blog.csdn.net/Ed7zgeE9X/article/details/132484971