前端需负责画面上呈现的所有东西,可能是显示静态资料或是需要将原始资料经过繁复的运算得到结果,不可能不用到如此重要的Data
以及 Methods
。
此篇范例取自 Vue.js 官网
延续上一篇: data 属性用来定义状态,并且记得需使用 function 方式!
对元件 (component) 来说,data
option 是一个 function。Vue 会在建立新的元件实体时,就会去呼叫这个function。这个 function 必须回传一个物件,Vue 会包装这个物件成 $data
,并储存在元件实体中,我们就可以使用 实体.$data.name
来取用。
ex:
const app = Vue.createApp({
data() {
return { count: 4 }
}
})
const vm = app.mount('#app')
// 以下两种方式都是印出 data 中的 count
console.log(vm.$data.count) // => 4
console.log(vm.count) // => 4
// 赋值给vm.count 的同时,也会同时更新 $data.count
vm.count = 5
console.log(vm.$data.count) // => 5
利用 methods
option,替实体增加方法,以物件表示,将需要使用的方法写在物件中。
ex:
const app = Vue.createApp({
data() {
return { count: 4 }
},
// 新增 methods option
methods: {
increment() {
// `this` 是参考这个元件实体
this.count++
}
}
})
const vm = app.mount('#app')
console.log(vm.count) // => 4
vm.increment()
console.log(vm.count) // => 5
Vue 会自动绑定
this
给methods
,所以methods
中可以存取这个实体的内容
在模板中可以使用一些简单的运算式,如果是属於比较复杂或是重复使用的逻辑运算,建议使用computed
。
ex:
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
ex:
Vue.createApp({
data() {
return {
author: {
name: 'John Doe',
books: [
'Vue 2 - Advanced Guide',
'Vue 3 - Basic Guide',
'Vue 4 - The Mystery'
]
}
}
},
computed: {
// a computed getter, 宣告一个 publishedBooksMessage 属性
publishedBooksMessage() {
// `this` 指向 vm 实体
return this.author.books.length > 0 ? 'Yes' : 'No'
}
}
}).mount('#computed-basics')
<div id="computed-basics">
<p>Has published books:</p>
<span>{{ publishedBooksMessage }}</span>
</div>
computed 是当依赖的或是有连结到的值改变时,就会跟着改变。例如 vm.author.books
值异动时,vm.publishedBooksMessage
就会更新。
Computed 属性预设是 getter
,也有 setter
可以使用。
ex:
// ...
computed: {
fullName: {
// getter
// 会观察 firstName 和 lastName 是否改变
get() {
return this.firstName + ' ' + this.lastName
},
// setter
// 当 fullName 被设值时,set 会被触发
set(newValue) {
const names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...
每日一句:
中秋连假启动,存稿模式催落
<<: 第 02 天 循序渐进加深难度( leetcode 002 )
>>: [C 语言笔记--Day07] 如何用 C 语言实作一个泛型物件
● 让我们来一起探究什麽是"量化交易"吧! 说到"反覆验证"...
Object 本身自带 [[Get]] 机制能帮我们找到符合 property name (或说 k...
前言 在 上一篇文章 中讲完了 Zettelkasten 笔记法,这篇文章来讲它的优化版本 - An...
前言 今天先暂停一下sum的题目,来做top 100 liked的另外一题─287. Find th...
前言 当熟悉了历史资料,发现有更厉害的K线,这时候就要善用工具,好好的料理资料一番,这次我们来用K线...