代码是计算机程序的基本构成单位,它是由一定的规则和语法组成的文字信息,用来表达计算机指令。代码可以用来控制计算机,实现特定功能,也可以用来表达思想。代码是一门非常重要的语言,它可以帮助人们理解和控制计算机。
代码可以分为两大类:高级语言和低级语言。高级语言是一门人工语言,具有易于理解、易于使用、易于学习的特性。例如C++、Java、Python、PHP 等都是高级语言。而低级语言则是一门机器语言,具有复杂、难于理解、难于使用的特性。例如汇编语言就是一门低级语言。
代码在当今时代扮演者重要的作用,它不仅可以帮助人们快速开发出各式各样的应用,还能够带来很多新奇的想法和创意。此外,代码还能够带来很多新奇的想法和创意;例如地图导航应用就是通过代码开发出来的。
学习代码并不难,但要想真正掌握它却需要不断地去学习和实战。学习代码需要具备一定的数学能力和逻辑思考能力;同时还要具备一定的耐心和勤奋才能真正把代 码学会并且能够使用得当。
#include// 对标准I/O库进行声明 int main() // 主函数 { printf("Hello World!\n"); // 这里将会打印出“Hello World!” return 0; // 返回0表明正常退出 }
Function
返回组件实例的 data 对象的函数。在 data
中,我们不建议观察具有自身状态行为的对象,如浏览器 API 对象和原型 property。一个好主意是这里只有一个表示组件 data 的普通对象。
一旦观察过,你就无法在根数据对象上添加响应式 property。因此推荐在创建实例之前,就声明所有的根级响应式 property。
实例创建之后,可以通过 vm.$data
访问原始数据对象。组件实例也代理了 data 对象上所有的 property,因此访问 vm.a
等价于访问 vm.$data.a
。
以 _
或 $
开头的 property 不会被组件实例代理,因为它们可能和 Vue 内置的 property、API 方法冲突。你可以使用例如 vm.$data._property
的方式访问这些 property。
// 直接创建一个实例
const data = { a: 1 }
// 这个对象将添加到组件实例中
const vm = Vue.createApp({
data() {
return data
}
}).mount("#app")
console.log(vm.a) // => 1
注意,如果你为 data property 使用了箭头函数,则 this
不会指向这个组件的实例,不过你仍然可以将其实例作为函数的第一个参数来访问。
data: vm => ({ a: vm.myProp })
Array<string> | Object
props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高阶选项,如类型检测、自定义验证和设置默认值。
你可以基于对象的语法使用以下选项:
type
:可以是下列原生构造函数中的一种:String
、Number
、Boolean
、Array
、Object
、Date
、Function
、Symbol
、任何自定义构造函数、或上述内容组成的数组。会检查一个 prop 是否是给定的类型,否则抛出警告。Prop 类型的更多信息在此。default
:any
为该 prop 指定一个默认值。如果该 prop 没有被传入,则换做用这个值。对象或数组的默认值必须从一个工厂函数返回required
:Boolean
义该 prop 是否是必填项。在非生产环境中,如果这个值为 truthy 且该 prop 没有被传入的,则一个控制台警告将会被抛出。validator
:Function
自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 falsy 的值 (也就是验证失败),一个控制台警告将会被抛出。你可以在这里查阅更多 prop 验证的相关信息。 const app = Vue.createApp({})
// 简单语法
app.component("props-demo-simple", {
props: ["size", "myMessage"]
})
// 对象语法,提供验证
app.component("props-demo-advanced", {
props: {
// 类型检查
height: Number,
// 类型检查 + 其他验证
age: {
type: Number,
default: 0,
required: true,
validator: value => {
return value >= 0
}
}
}
})
{ [key: string]: Function | { get: Function, set: Function } }
计算属性将被混入到组件实例中。所有 getter 和 setter 的 this
上下文自动地绑定为组件实例。
注意,如果你为一个计算属性使用了箭头函数,则 this
不会指向这个组件的实例,不过你仍然可以将其实例作为函数的第一个参数来访问。
computed: {
aDouble: vm => vm.a * 2
}
计算属性的结果会被缓存,除非依赖的响应式 property 变化才会重新计算。注意,如果某个依赖 (比如非响应式 property) 在该实例范畴之外,则计算属性是不会被更新的。
const app = Vue.createApp({
data() {
return { a: 1 }
},
computed: {
// 仅读取
aDouble() {
return this.a * 2
},
// 读取和设置
aPlus: {
get() {
return this.a + 1
},
set(v) {
this.a = v - 1
}
}
}
})
const vm = app.mount("#app")
console.log(vm.aPlus) // => 2
vm.aPlus = 3
console.log(vm.a) // => 2
console.log(vm.aDouble) // => 4
{ [key: string]: Function }
methods 将被混入到组件实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this
自动绑定为组件实例。
注意
注意,不应该使用箭头函数来定义 method 函数 (例如 plus:() => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this
将不会按照期望指向组件实例,this.a
将是 undefined。
const app = Vue.createApp({
data() {
return { a: 1 }
},
methods: {
plus() {
this.a++
}
}
})
const vm = app.mount("#app")
vm.plus()
console.log(vm.a) // => 2
{ [key: string]: string | Function | Object | Array}
一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。组件实例将会在实例化时调用 $watch()
,参阅 $watch,了解更多关于 deep
、immediate
和 flush
选项的信息。
const app = Vue.createApp({
data() {
return {
a: 1,
b: 2,
c: {
d: 4
},
e: "test",
f: 5
}
},
watch: {
a(val, oldVal) {
console.log(`new: ${val}, old: ${oldVal}`)
},
// 字符串方法名
b: "someMethod",
// 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
c: {
handler(val, oldVal) {
console.log("c changed")
},
deep: true
},
// 该回调将会在侦听开始之后被立即调用
e: {
handler(val, oldVal) {
console.log("e changed")
},
immediate: true
},
// 你可以传入回调数组,它们会被逐一调用
f: [
"handle1",
function handle2(val, oldVal) {
console.log("handle2 triggered")
},
{
handler: function handle3(val, oldVal) {
console.log("handle3 triggered")
}
}
]
},
methods: {
someMethod() {
console.log("b changed")
},
handle1() {
console.log("handle 1 triggered")
}
}
})
const vm = app.mount("#app")
vm.a = 3 // => new: 3, old: 1
注意
注意,不应该使用箭头函数来定义 watcher 函数 (例如 searchQuery: newValue => this.updateAutocomplete(newValue)
)。理由是箭头函数绑定了父级作用域的上下文,所以 this
将不会按照期望指向组件实例,this.updateAutocomplete
将是 undefined。
Array<string> | Object
emits 可以是数组或对象,从组件触发自定义事件,emits 可以是简单的数组,或者对象作为替代,允许配置和事件验证。
在对象语法中,每个 property 的值可以为 null
或验证函数。验证函数将接收传递给 $emit
调用的其他参数。如果 this.$emit("foo",1)
被调用,foo
的相应验证函数将接收参数 1
。验证函数应返回布尔值,以表示事件参数是否有效。
const app = Vue.createApp({})
// 数组语法
app.component("todo-item", {
emits: ["check"],
created() {
this.$emit("check")
}
})
// 对象语法
app.component("reply-form", {
emits: {
// 没有验证函数
click: null,
// 带有验证函数
submit: payload => {
if (payload.email && payload.password) {
return true
} else {
console.warn(`Invalid submit event payload!`)
return false
}
}
}
})
注意
emits
选项中列出的事件不会从组件的根元素继承,也将从 $attrs
property 中移除。
构造器每个 Vue.js 应用都是通过构造函数Vue创建一个Vue 的根实例启动的:var vm = new Vue({// 选项})虽然没有完全遵循MVVM 模...
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML...
数据绑定一个常见需求是操作元素的 class 列表和它的内联样式。因为它们都是属性 ,我们可以用v-bind处理它们:只需要计算出表达...
大部分的基础内容我们已经讲到了,现在讲点底层内容。Vue 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图...