条件渲染
这个就是
if
else
, 在vue
里, 语法是v-if
v-else
v-if
v-else
<script setup>
const awesome = ref(true)
</script>
<template>
<button @click="awesome = !awesome">Toggle</button>
<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>
</template>
通过 click
改变 布尔值, 再通过条件语句, 来实现 toggle 效果
v-else-if
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>
使用 <template>
来打包一组元素的渲染切换
<script setup>
const ok = ref(true)
const ok2 = ref(true)
</script>
<template>
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
<template v-else-if="ok2">
<h1>Title</h1>
<p>Paragraph 3</p>
<p>Paragraph 4 </p>
</template>
<template v-else>
<h1>Title</h1>
<p>Paragraph 5</p>
<p>Paragraph 6</p>
</template>
</template>
v-show
与 v-if
类似的东西
这个先不学了, 粗略看了一下, 能跟
v-if
实现基本一样的效果, 只是在性能和渲染结果上有细微差异, 唉, 先不管了, 咱们目前估计也用不到, 不学不学, 真烦
传送门
列表渲染
这应该就是循环语句了
v-for
基本渲染
<script setup>
const cities = ref([{name: "Beijing"}, {name: "Chengdu"}])
</script>
<template>
<li v-for="city in cities">
{{ city.name }}
</li>
</template>
显示数组下标
<template>
<li v-for="(city, index) in cities">
cityIndex: {{index}} , cityName: {{ city.name }}
</li>
</template>
> `in` 也可以用 `of` 来替代, 挺无语的, 搞这么多干啥, 乱七八糟的, 统一规则不好么
遍历字典
const myObject = reactive({
title: 'How to do lists in Vue',
author: 'Jane Doe',
publishedAt: '2016-04-10'
})
* 遍历获取 `value`, 相当于 `python` 中的 `.values()`
```
<ul>
<li v-for="value in myDictObject">
{{ value }}
</li>
</ul>
```
* 同时获取 `key`, `value`
```
<ul>
<li v-for="(value, key) in myDictObject">
{{key}} = {{ value }}
</li>
</ul>
```
* 下标也同时获取到
```
<ul>
<li v-for="(value, key, index) in myDictObject">
{{key}} = {{ value }}, index is : {{ index }}}
</li>
</ul>
```
v-for
可直接接受一个 整数值
<span v-for="n in 10">{{ n }}</span>
有点特别的是,
n
是从1
开始的, 不是0
, ps: 真无语, 又搞这样没用的东西
<template>
打包多个元素
与
v-if
一样, 也是可以在块
里打包多个元素
<ul>
<template v-for="item in items">
<li>{{ item.msg }}</li>
<li class="divider" role="presentation"></li>
</template>
</ul>
v-if
, v-for
嵌套
<template v-for="todo in todos">
<li v-if="!todo.isComplete">
{{ todo.name }}
</li>
</template>
- 不推荐
v-if
,v-for
同时使用
优先级不一样, ps: 真的不是设计烂?
风格指南
key 管理状态
没搞懂这个有什么用, 先放放好了文档链接
数组修改
修改数组数据, vue 自动侦测并修改, 修改的类型分为两种, 一种是不更换数组对数据内部数据进行修改, 还有一种是创建一个新数组, 替换原数组
修改数组
在原有数组上进行修改, 不创建新数组
push()
: 在数组的末尾追加元素, 并返回新长度pop()
: 删除最后 1 个元素, 返回该值shift()
: 删除前面第 1 个元素, 返回该值unshift()
: 在数组的开头添加元素, 返回新长度splice(index,howmany,item1, …, itemX)
: 插入/删除项目index
:元素插入/删除 索引位置howmany
:要删除的项目数量, 默认不设置, 表示其后的全部元素*items
:可选, 向数组添加的新元素。
例:
- splice(1): 保留前一个元素之后的全部删除
- splice(2): 保留前两个元素之后的全部删除splice()既可以删除, 也可以添加
sort
排序reverse
反转
替换成新数组
有些变更不支持在原数组上进行更改, 只能生成一个 新数组
filter()
: 通过一定条件过滤出一个新数组example1.items = example1.items.filter(function (item) { return item.message.match(/Foo/) }) 123
concat()
: 连接两个或多个数组slice(start, end)
: 切片