vue3:computed,ref/mounted(){},watch:{}

计算属性computed:{}

computed里面声明的是变量,变量的值通过return获得。return 的值依赖于data中的属性 只要依赖的data发生变化 就会触发调用一次计算属性

<script>
let id = 0

export default {
  data() {
    return {
      newTodo: '',
      hideCompleted: false,
      todos: [
        { id: id++, text: 'Learn HTML', done: true },
        { id: id++, text: 'Learn JavaScript', done: true },
        { id: id++, text: 'Learn Vue', done: false }
      ]
    }
  },
  computed: {
    filteredTodos(){
     return this.hideCompleted ? this.todos.filter(t => !t.done):this.todos
    }
  },
  methods: {
    addTodo() {
      this.todos.push({ id: id++, text: this.newTodo, done: false })
      this.newTodo = ''
    },
    removeTodo(todo) {
      this.todos = this.todos.filter((t) => t !== todo)
    }
  }
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo">
    <button>Add Todo</button>
  </form>
  <ul>
    <li v-for="todo in filteredTodos" :key="todo.id">
      <input type="checkbox" v-model="todo.done">
      <span :class="{ done: todo.done }">{{ todo.text }}</span>
      <button @click="removeTodo(todo)">X</button>
    </li>
  </ul>
  <button @click="hideCompleted = !hideCompleted">
    {{ hideCompleted ? 'Show all' : 'Hide completed' }}
  </button>
</template>

<style>
.done {
  text-decoration: line-through;
}
</style>

ref操作属性,生命周期之mounted(){}//组件已经挂载

生命周期详情: Vue.js (vuejs.org)

<script>
export default {
  mounted(){
    //组件已经挂载
    this.$refs.p.textContent="77845K";
  }
}
</script>

<template>
  <p ref="p">hello</p>
</template>

侦听器watch:{valueName(newValue,oldValue){}

1.使用 watch 选项来侦听 valueName属性的变化。当 valueName改变时,侦听回调将被调用,并且接收新值newValue作为参数
<script>
export default {
  data() {
    return {
      todoId: 1,
      todoData: null
    }
  },
  methods: {
    async fetchData() {
      this.todoData = null
      const res = await fetch(
        `https://jsonplaceholder.typicode.com/todos/${this.todoId}`
      )
      this.todoData = await res.json()
    }
  },
  mounted() {
    this.fetchData()
  },
  watch:{
    todoId(newId){
       this.fetchData()
    }
  }
}
</script>

<template>
  <p>Todo id: {{ todoId }}</p>
  <button @click="todoId++">Fetch next todo</button>
  <p v-if="!todoData">Loading...</p>
  <pre v-else>{{ todoData }}</pre>
</template>
2.如果需要watch监听对象或数组的变化,则需要改写成下面这样子。
watch: {
    list: {
      deep: true,//深度监听
      handler: function(newVal, oldVal) {
        console.log('list数组改变了')
        console.log('改变以后的值' + newVal)
        console.log('改变以前的值' + oldVal)
      },
    }
}

因为对象或数组的引用地址没有变,所以无法获取改变之前的值,如确实需要知道改变之前的值,则需要单独监听。

watch: {
    'list.value': {
      handler: function(newVal, oldVal) {
        console.log('list数组改变了')
        console.log('改变以后的值' + newVal)
        console.log('改变以前的值' + oldVal)
      },
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0、前置条件 1. 预备知识 JavaScript 概述[https://developer.mozilla.or...
    135e606a0926阅读 874评论 0 0
  • 一、概念介绍 Vue.js和React.js分别是目前国内和国外最火的前端框架,框架跟类库/插件不同,框架是一套完...
    刘远舟阅读 1,089评论 0 0
  • setup函数 与data、methods中的数据合并时,setup返回的数据的优先级更高 没有this,setu...
    海豚先生的博客阅读 741评论 0 1
  • day01基础 官方网站地址:https://vuejs.org中文网站地址:https://cn.vuejs.o...
    Konlj阅读 354评论 0 1
  • 一、 Vue 介绍 Vue.js 是一套构建用户界面的渐进式 JavaScript 框架 可以轻松构建 SPA 应...
    璎珞纨澜阅读 846评论 0 0