注册

VUE3基础学习(二)模板语法,简单响应式,计算属性

说明:Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。

一、模板语法

{{}}使用

<span>Message: {{ msg }}</span> {{}} 标识的数据将会从数据中获取,同时每次 msg 属性更改时它也会同步更新。

v-html

<p>Using v-html directive: <span v-html="rawHtml"></span></p>

若想插入 HTML,你需要使用 v-html 指令

Attribute 绑定

<div v-bind:id="dynamicId"></div>

简写 <div :id="dynamicId"></div>

布尔型 Attribute

<button :disabled="isButtonDisabled">Button</button>

当 isButtonDisabled 为[真值]或一个空字符串 (即 <button disabled="">) 时,元素会包含这个 disabled attribute。而当其为其他[假值]时 attribute 将被忽略。

动态绑定多个值

如果你有像这样的一个包含多个 attribute 的 JavaScript 对象:

data() {
return {
objectOfAttrs: {
id: 'container',
class: 'wrapper'
}
}
}

通过不带参数的 v-bind,你可以将它们绑定到单个元素上:

template

<div v-bind="objectOfAttrs"></div>

使用 JavaScript 表达式

注意:仅仅支持简单的表达式

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div :id="`list-${id}`"></div>

二、 响应式

如下例子:


<script>
export default {
created() {
// 生命周期钩子中创建
},
unmounted() {
// 最好是在组件卸载时
},
data() {
return {
count: 1
}
},
methods :{
increment(){
this.count ++
console.log(this.count)
}
},

// `mounted` is a lifecycle hook which we will explain later
mounted() {
// `this` refers to the component instance.
console.log(this.count) // => 1
this.increment()
}
}
</script>

<template>
<div>
<span>Count is: {{ count }}</span>
<button @click="increment">{{ count }}</button>
</div>
</template>

1、 data 选项来声明组件的响应式状态 2、要为组件添加方法,我们需要用到 methods 选项。

计算属性

说明:模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。这时候我们需要用计算属性了。 实例:

export default {
data() {
return {
author: {
name: 'John Doe',
books: [
'Vue 2 - Advanced Guide',
'Vue 3 - Basic Guide',
'Vue 4 - The Mystery'
]
}
}
},
computed: {
// 一个计算属性的 getter
publishedBooksMessage() {
// `this` 指向当前组件实例
return this.author.books.length > 0 ? 'Yes' : 'No'
}
}
}

template

<p>Has published books:</p>
<span>{{ publishedBooksMessage }}</span>

计算属性 与 方法 对比

如上同样用方法也可以实现,但其中有什么区别么?

<p>{{ calculateBooksMessage() }}</p>

js

// 组件中
methods: {
calculateBooksMessage() {
return this.author.books.length > 0 ? 'Yes' : 'No'
}
}

若我们将同样的函数定义为一个方法而不是计算属性,两种方式在结果上确实是完全相同的,然而,不同之处在于计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算。这意味着只要 books 不改变,无论多少次访问 publishedBooksMessage 都会立即返回先前的计算结果,而不用重复执行 getter 函数。


作者:王二蛋与他的张大花
链接:https://juejin.cn/post/7254043722945675321
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册