vue3 笔记 - 声明式 一
2023-12-13 04:12:58
官网:Vue.js - 渐进式 JavaScript 框架 | Vue.js
vue3编写有声明式和响应式。该文章仅记录声明式。vue3声明式与vue2相同。
一、生命周期
- 创建之前 beforeCreate()
- 已创建 created()
- 挂载之前 beforeMount()
- 已挂载 mounted()
- 销毁之前 beforeUnmount()
- 已销毁 unmounted()
二、模板语法
//文本插值
{{ value }}
//原始html
<p v-html="value"></p>
//属性绑定
<p v-bind:id="value"></p>
<p :id="value"></p>
//布尔型
<button :disabled="isButtonDisabled">Button</button>
//绑定多个值
const objectOfAttrs = {
id: 'container',
class: 'wrapper'
}
<div v-bind="objectOfAttrs"></div>
//JavaScript 表达式
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div :id="`list-${id}`"></div>
//函数调用
<time :title="toTitleDate(date)" :datetime="date">
{{ formatDate(date) }}
</time>
2.1 内置指令
- v-text 更新元素的文本内容
- v-html 更新元素的innerhtml
- v-show 基于表达式值的真假性,来改变元素的可见性。页面渲染消耗多,适合频繁切换显示。
- v-if 基于表达式值的真假性,来条件性地渲染元素或者模板片段。元素切换消耗多。
- v-else 表示
v-if
或v-if
/v-else-if
链式调用的“else 块”。 - v-else-if 表示
v-if
的“else if 块”。可以进行链式调用。 - v-for 基于原始数据多次渲染元素或模板块。
- v-on 给元素绑定事件监听器。缩写@。
- v-bind 动态的绑定一个或多个 attribute,也可以是组件的 prop。缩写:
- v-model 在表单输入元素或组件上创建双向绑定。
- v-slot 用于声明具名插槽或是期望接收 props 的作用域插槽。
- v-pre 跳过该元素及其所有子元素的编译。
- v-once 仅渲染元素和组件一次,并跳过之后的更新。
- v-memo 缓存一个模板的子树。仅用于性能至上场景中的微小优化,应该很少需要。最常见的情况可能是有助于渲染海量
v-for
列表。 - v-cloak 用于隐藏尚未完成编译的 DOM 模板。
<div v-for="item in list" :key="item.id" v-memo="[item.id === selected]">
<p>ID: {{ item.id }} - selected: {{ item.id === selected }}</p>
<p>...more child nodes</p>
</div>
[v-cloak] {
display: none;
}
template
<div v-cloak>
{{ message }}
</div>
三、变量定义及使用
声明式定义和响应式不同,代码如下。变量是在函数中返回。
<template>
<p>{{ msg }}</p>
<div>
<ul>
<li v-for="(item,index) in list" :key="index">{{ item.value }}</li>
</ul>
</div>
<p ></p>
</template>
<script>
export default{
name:'Test',
data:function(){
return{
msg:"test",
list:[
{id:1,value:test1},
{id:2,value:test2},
{id:3,value:test3},
]
}
},
}
</script>
3.2 计算属性
?在computed中使用变量名作为方法名,可在模板中使用。计算属性也可以定义为方法,在methods中定义,但是计算属性基于它们的响应式依赖进行缓存,只在相关响应式依赖发生改变时它们才会重新求值。
以下代码中计算属性now将不再更新,因为Date.now()不是响应式依赖。
<template>
<div id="example">
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
</template>
<script>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.message.split('').reverse().join('')
},
now: function () {
return Date.now()
}
}
})
</script>
3.3 监听
通过 watch
选项提供了一个更通用的方法,来响应数据的变化。
之前使用开源vue后台框架,相同页面不同参数的时候,使用监听处理传过来的参数,便于多个页面显示。
<template>
<div id="watch-example">
<p>
Ask a yes/no question:
<input v-model="question">
</p>
<p>{{ answer }}</p>
</div>
</template>
<script>
var vm = new Vue({
el: '#example',
data: {
question: '',
answer:'',
},
watch: {
// 如果 `question` 发生改变,这个函数就会运行
question: function (newQuestion, oldQuestion) {
this.answer = newQuestion
}
},
})
</script>
文章来源:https://blog.csdn.net/lsswear/article/details/134854479
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!