Vue.js中的计算属性、监视属性与生命周期详解

yizhihongxing

Vue.js中的计算属性、监视属性与生命周期详解

计算属性

什么是计算属性

计算属性(computed)是Vue.js内置的一个特殊属性,可以定义一个依赖其它属性的计算属性,而这个计算属性的值会被缓存起来,在某些需要频繁用到的属性计算中,计算属性会比直接通过方法计算效率更高,因为计算属性是有缓存的,只有在它的相关属性发生改变时才会重新计算,否则直接取缓存值。

计算属性的使用方法

计算属性的基本语法如下:

computed: {
  计算属性名: function() {
    // 计算逻辑
    return 计算结果
  }
}

举个例子,我们定义一个data属性a和一个计算属性b,b的取值依赖于a,那么我们可以这样写:

<div id="app">
  <p>data属性a的值为:{{ a }}</p>
  <p>计算属性b的值为:{{ b }}</p>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    a: 1
  },
  computed: {
    b: function () {
      return this.a + 1
    }
  }
})

在此例子中,a的值为1,因此b的值就是a+1,所以b的值为2。

如果我们继续修改a的值,b的值会自动更新。例如我们执行下面的代码:

vm.a = 2
console.log(vm.b) // 输出 3

此时b的值就从之前的2变成了3。

计算属性示例

假设我们有一个商品列表列表,每个商品有价格和数量两个属性,那么一个计算属性可以计算出当前购物车的总价:

<div id="app">
  <ul>
    <li v-for="item in cart">
      {{ item.name }} - {{ item.price }}元 x {{ item.count }}个 = {{ item.totalPrice }}元
    </li>
  </ul>
  <p>总价:{{ totalPrice }}</p>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    cart: [
      { id: 1, name: '商品1', price: 10, count: 3 },
      { id: 2, name: '商品2', price: 20, count: 2 },
      { id: 3, name: '商品3', price: 30, count: 1 }
    ]
  },
  computed: {
    totalPrice: function() {
      var total = 0
      for (var i = 0; i < this.cart.length; i++) {
        var item = this.cart[i]
        total += item.price * item.count
      }
      return total
    }
  }
})

在计算属性totalPrice中,我们循环遍历购物车中的每个商品,累加它们的总价,最后返回总价。在模板中使用该计算属性,便可以直接显示购物车的总价。

监视属性

什么是监视属性

监视属性(watcher)是Vue.js中的另一个重要特性,可用于监听某个属性的变化,当属性发生变化时,可以执行一段自定义的代码逻辑,例如发送一次Ajax请求、更新一次DOM、再次执行计算属性等。

监视属性的使用方法

watch属性的基本语法如下:

watch: {
  监视属性名: function (newVal, oldVal) {
    // 变化逻辑
  }
}

举个例子,假设我们有两个属性a和b,当a的值发生变化时,我们需要将b的值更新为a的两倍,我们可以这样写:

<div id="app">
  <p>a的值是:{{ a }}</p>
  <p>b的值是:{{ b }}</p>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    a: 1,
    b: 2
  },
  watch: {
    a: function (newVal, oldVal) {
      this.b = newVal * 2
    }
  }
})

在此例子中,当我们修改a的值,b的值会自动更新为a的两倍。

监视属性示例

假设我们要监听一个输入框的变化,每当用户输入完毕并离开输入框时,我们需要发送一次Ajax请求,获取用户输入的关键词所匹配的结果:

<div id="app">
  <input v-model="keyword" @blur="search">
  <ul>
    <li v-for="(item, index) in searchResult" :key="index">{{ item }}</li>
  </ul>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    keyword: '',
    searchResult: []
  },
  methods: {
    search: _.debounce(function () {
      // 发送Ajax请求
      var that = this
      axios.get('/api/search', {
        params: {
          keyword: that.keyword
        }
      })
      .then(function (response) {
        that.searchResult = response.data
      })
      .catch(function (error) {
        console.log(error)
      })
    }, 500)
  }
})

在此例子中,我们在输入框上监听了blur事件,当用户离开输入框时,会自动触发search方法,发送Ajax请求,并将结果保存到searchResult中,最终在模板中显示出搜索结果。

生命周期

什么是生命周期

生命周期(lifecycle)是Vue.js中的另一个重要概念,它描述了Vue.js实例从创建、运行到销毁期间经历的状态变化,以及在每个状态变化时自动执行的函数。

生命周期的阶段

Vue.js实例经历了以下生命周期阶段:

  1. 创建阶段:beforeCreate、created;
  2. 挂载阶段:beforeMount、mounted;
  3. 更新阶段:beforeUpdate、updated;
  4. 销毁阶段:beforeDestroy、destroyed。

在每个阶段,Vue.js都会自动触发一些固定名称的函数,开发者可以利用这些生命周期钩子函数在不同阶段执行一些自定义的代码。

生命周期示例

假设我们开发了一个弹出对话框的组件,当需要弹出对话框时,我们需要先将对话框组件动态创建并挂载到页面中,待用户关闭对话框后,我们又需要销毁它。生命周期函数可以帮助我们完成这个任务。

<div id="app">
  <button @click="showDialog">显示对话框</button>
  <modal v-if="show" @close="closeDialog"></modal>
</div>
Vue.component('modal', {
  template: `
    <div class="modal">
      <div class="modal-mask"></div>
      <div class="modal-wrapper">
        <div class="modal-container">
          <div class="modal-header">
            <h3 class="modal-title"><slot name="header"></slot></h3>
            <button class="modal-close" @click="$emit('close')">×</button>
          </div>
          <div class="modal-body"><slot></slot></div>
        </div>
      </div>
    </div>
  `,
  mounted: function () {
    document.body.appendChild(this.$el)
  },
  beforeDestroy: function () {
    this.$el.parentNode.removeChild(this.$el)
  }
})

var vm = new Vue({
  el: '#app',
  data: {
    show: false
  },
  methods: {
    showDialog: function () {
      this.show = true
    },
    closeDialog: function () {
      this.show = false
    }
  }
})

在此例子中,我们定义了一个modal组件,并在其中的mounted函数中将组件的DOM元素动态挂载到body元素中。然后在组件被销毁前,我们又在组件的beforeDestroy函数中,将其DOM元素从body元素中移除。

在Vue.js实例中,我们定义了show属性,表示对话框是否显示,在关闭对话框时,我们将show属性设置为false,从而销毁对话框组件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue.js中的计算属性、监视属性与生命周期详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vitepress的文档渲染基础教程

    下面是完整的“Vitepress的文档渲染基础教程”的攻略。 Vitepress的文档渲染基础教程 简介 Vitepress 是一种基于 Vue 的静态站点生成器,适用于构建技术文档等静态站点。 Vitepress 充分利用 Vue 的单文件组件(SFC)能力,并在 VuePress 的基础上通过 Vite 构建实现高效的站点构建。 Vitepress 可以…

    Vue 2023年5月27日
    00
  • 详解如何在vue项目中使用lodop打印插件

    下面是详解如何在vue项目中使用lodop打印插件的完整攻略: 步骤一:下载并安装Lodop插件 下载Lodop打印插件的安装包 安装Lodop打印插件,安装完成后,可以在浏览器的扩展中看到Lodop打印插件 步骤二:在vue项目中使用Lodop插件 使用npm安装lodop-printer npm install –save lodop-printer …

    Vue 2023年5月27日
    00
  • 详解Vue实现直播功能

    详解Vue实现直播功能 概述 Vue是一款流行的前端框架,提供了一种现代化的方式来构建交互式用户界面。在这篇文章中,我们将详细介绍如何在Vue应用中实现直播功能。 实现步骤 1. 前置条件 在开始实现直播功能之前,需要确保读者已经掌握以下的前置知识: Vue.js基础 Node.js基础 WebSocket协议 2. 构建Vue应用 首先,我们需要使用Vue…

    Vue 2023年5月28日
    00
  • Vue无法访问.env.development定义的变量值问题及解决

    下面我将为您详细讲解 Vue 中无法访问 .env.development 定义的变量值问题及解决的完整攻略。 问题背景 在开发 Vue 网站时,我们通常需要配置环境变量,用于在不同环境中读取不同的配置信息。而在 Vue 中,我们可以通过在项目根目录下创建名为 .env、.env.local、.env.development 等文件来定义环境变量。 然而,在…

    Vue 2023年5月28日
    00
  • vue中使用localstorage来存储页面信息

    当使用Vue构建单页应用程序时,使用localStorage来存储页面信息是一种常见的做法。localStorage是一个API,可以将数据永久存储在浏览器中,即使用户关闭了浏览器,数据也不会丢失。以下是Vue中使用localStorage来存储页面信息的完整攻略,包含两条示例说明。 使用localStorage存储数据 要在Vue中使用localStora…

    Vue 2023年5月28日
    00
  • Vue前端书写规范大全(非常详细!)

    首先我们来谈谈Vue前端书写规范大全的重要性,这是因为在Vue开发中,写好规范的代码能够提高代码的可读性和可维护性,同时也能够避免很多不必要的错误和 bug,因此Vue前端书写规范大全是非常重要的。 Vue前端书写规范大全主要包括以下几个方面: 1. 文件命名规范 1.1 Vue 单文件组件命名规范 Vue 单文件组件(.vue 文件)应按照以下格式进行命名…

    Vue 2023年5月27日
    00
  • Vue自定义指令详解

    Vue自定义指令详解 基本概念 Vue自定义指令是Vue.js提供的一种扩展语法,用于自定义DOM操作行为。 自定义指令通过v-前缀来定义,并且可以带有参数和修饰符两个部分。 注册自定义指令 // 全局注册 Vue.directive(‘my-directive’, { // 自定义指令的钩子函数 bind: function (el, binding, v…

    Vue 2023年5月27日
    00
  • 快速了解vue-cli 3.0 新特性

    快速了解vue-cli 3.0 新特性 简介 vue-cli是一个脚手架工具,用于在Vue.js项目中快速生成模板和配置文件。在Vue.js一系列项目中,vue-cli是一个非常重要的工具,对于Vue.js的开发和部署有着重要的作用。 vue-cli 3.0 新特性 vue-cli 3.0是一个全新的版本,这个版本有着重要的改进和新特性,使得用户可以更轻松的…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部