Vue.js教程笔记

Vue.js教程笔记

教程Vue.js

Attribute 绑定

思考

编码发现动态绑定和静态绑定的问题

动态绑定:

<h1 :class="titleClass">Make me red</h1> 使用了 Vue 的动态类绑定 (:class)。titleClass 是一个 ref,它的初始值是 'title',即类名为 title。Vue 会将 titleClass 的值动态绑定为 h1 的 class,效果等同于直接设置 class="title"。

<script setup>
import { ref } from 'vue'

const titleClass = ref('title')
</script>

<template>
  <h1 :class="titleClass">Make me red</h1>
</template>

<style>
.title {
  color: red;
}
</style>

静态绑定:

<h1 class="title">Make me red</h1> 是静态绑定,直接将 title 类赋予 h1 元素。这个类直接引用了 CSS 中定义的 .title,因此同样应用了颜色规则。

<script setup>
import { ref } from 'vue'

const titleClass = ref('title')
</script>

<template>
  <h1 class="title">Make me red</h1> <!-- 此处添加一个动态 class 绑定 -->
</template>

<style>
.title {
  color: red;
}
</style>

列表渲染

更新列表有两种方式:

在源数组上调用变更方法:

todos.value.push(newTodo)

使用新的数组替代原数组:

todos.value = todos.value.filter(/* ... */)

运行代码

<script setup>
import { ref } from 'vue'

// 给每个 todo 对象一个唯一的 id
let id = 0

const newTodo = ref('')
const todos = ref([
  { id: id++, text: 'Learn HTML' },
  { id: id++, text: 'Learn JavaScript' },
  { id: id++, text: 'Learn Vue' }
])

function addTodo() {
  todos.value.push({id: id++, text: newTodo.value})
  newTodo.value = ''
}

function removeTodo(todo) {
  todos.value = todos.value.filter((t)=>t !== todo)
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo" required placeholder="new todo">
    <button>Add Todo</button>
  </form>
  <ul>
    <li v-for="todo in todos" :key="todo.id">
      {{ todo.text }}
      <button @click="removeTodo(todo)">X</button>
    </li>
  </ul>
</template>

函数的作用:

removeTodo(todo) 函数用于从待办事项(todos)列表中删除某个特定的待办事项(todo)。

函数的实现:

function removeTodo(todo) {
  todos.value = todos.value.filter((t) => t !== todo)
}

这个函数的逻辑基于数组的 filter 方法。它做了以下几步:
1.参数:

函数接收一个参数 todo,这个参数是要删除的待办事项对象(即一个对象形如 { id: 1, text: 'Learn HTML' })。
2.使用 filter 方法:
todos.value.filter((t) => t !== todo) 语句中,filter 方法会遍历 todos.value(待办事项列表)中的每一个待办事项 t。

filter 方法的作用是生成一个新的数组,包含所有不满足条件的元素。在这里,条件是 t !== todo,即 t 不等于我们要删除的那个 todo。

也就是说,所有与传入的 todo 不相等的待办事项都会保留下来,而与 todo 相等的待办事项会被过滤掉(即删除)。
3.更新 todos.value:

todos.value 是一个响应式的数组。在调用 filter 后,会生成一个新的数组(不包含要删除的待办事项),然后将这个新数组赋值给 todos.value。Vue 会自动检测到这个更改,并更新视图,移除相应的待办事项。

计算属性

添加 filteredTodos 计算属性并实现计算逻辑!如果实现正确,在隐藏已完成项目的状态下勾选一个 todo,它也应当被立即隐藏。

<script setup>
import { ref, computed } from 'vue'

let id = 0

const newTodo = ref('')
const hideCompleted = ref(false)
const todos = ref([
  { id: id++, text: 'Learn HTML', done: true },
  { id: id++, text: 'Learn JavaScript', done: true },
  { id: id++, text: 'Learn Vue', done: false }
])

const filteredTodos = computed(() => {
  return hideCompleted.value ? todos.value.filter((t) => !t.done) : todos.value
})
function addTodo() {
  todos.value.push({ id: id++, text: newTodo.value, done: false })
  newTodo.value = ''
}

function removeTodo(todo) {
  todos.value = todos.value.filter((t) => t !== todo)
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo" required placeholder="new todo">
    <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>
相关推荐
Myli_ing14 分钟前
HTML的自动定义倒计时,这个配色存一下
前端·javascript·html
dr李四维31 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
雯0609~1 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ1 小时前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z1 小时前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
星星会笑滴1 小时前
vue+node+Express+xlsx+emements-plus实现导入excel,并且将数据保存到数据库
vue.js·excel·express
彭世瑜1 小时前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4041 小时前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish1 小时前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five1 小时前
TypeScript项目中Axios的封装
开发语言·前端·javascript