指南
基础
- 安装
- 简介
- Vue 实例
- 模板语法
- 计算属性和侦听器
- 类和样式绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
组件深入
- 组件注册
- Props
- 自定义事件
- 插槽
- 动态和异步组件
- 处理边缘情况
过渡和动画
- 进入/离开和列表过渡
- 状态过渡
可重用性和组合
- 混入
- 自定义指令
- 渲染函数和 JSX
- 插件
- 过滤器
工具
- 单文件组件
- 测试
- TypeScript 支持
- 生产部署
扩展
- 路由
- 状态管理
- 服务器端渲染
- 安全
内部机制
- 深入响应性
迁移
- 从 Vue 1.x 迁移
- 从 Vue Router 0.7.x 迁移
- 从 Vuex 0.6.x 迁移到 1.0
- 迁移到 Vue 2.7
元数据
- 与其他框架的比较
- 加入 Vue.js 社区!
- 认识团队
Vue 实例
创建 Vue 实例
每个 Vue 应用程序都从使用 Vue
函数创建一个新的 **Vue 实例** 开始
|
虽然与 MVVM 模式 没有严格的关联,但 Vue 的设计部分受到了它的启发。按照惯例,我们通常使用变量 vm
(ViewModel 的缩写)来指代我们的 Vue 实例。
当您创建一个 Vue 实例时,您会传入一个 **选项对象**。本指南的大部分内容描述了如何使用这些选项来创建您想要的行为。作为参考,您也可以浏览 API 参考 中的完整选项列表。
一个 Vue 应用程序由使用 new Vue
创建的 **根 Vue 实例** 组成,可以选择组织成一个嵌套的可重用组件树。例如,一个待办事项应用程序的组件树可能看起来像这样
|
我们将在后面详细讨论 组件系统。现在,您只需要知道所有 Vue 组件也是 Vue 实例,因此接受相同的选项对象(除了几个特定于根的选项)。
数据和方法
当创建一个 Vue 实例时,它会将 data
对象中找到的所有属性添加到 Vue 的 **响应式系统** 中。当这些属性的值发生变化时,视图将“响应”,更新以匹配新值。
|
当此数据发生变化时,视图将重新渲染。需要注意的是,data
中的属性只有在实例创建时存在才 **响应式**。这意味着如果您添加一个新属性,例如
|
那么对 b
的更改不会触发任何视图更新。如果您知道以后需要一个属性,但它最初为空或不存在,则需要设置一些初始值。例如
|
唯一例外是使用 Object.freeze()
,它阻止现有属性被更改,这也意味着响应式系统无法跟踪更改。
|
|
除了数据属性之外,Vue 实例还公开了一些有用的实例属性和方法。这些属性和方法以 $
为前缀,以区别于用户定义的属性。例如
|
将来,您可以查阅 API 参考 以获取完整实例属性和方法列表。
实例生命周期钩子
每个 Vue 实例在创建时都会经历一系列初始化步骤 - 例如,它需要设置数据观察、编译模板、将实例挂载到 DOM,以及在数据发生变化时更新 DOM。在此过程中,它还会运行称为 **生命周期钩子** 的函数,让用户有机会在特定阶段添加自己的代码。
例如,created
钩子可用于在实例创建后运行代码
|
还有一些其他钩子将在实例生命周期的不同阶段被调用,例如 mounted
、updated
和 destroyed
。所有生命周期钩子都使用其 this
上下文调用,该上下文指向调用它的 Vue 实例。
不要在选项属性或回调上使用 箭头函数,例如 created: () => console.log(this.a)
或 vm.$watch('a', newValue => this.myMethod())
。由于箭头函数没有 this
,this
将被视为任何其他变量,并通过父作用域进行词法查找,直到找到,这通常会导致错误,例如 Uncaught TypeError: Cannot read property of undefined
或 Uncaught TypeError: this.myMethod is not a function
。
生命周期图
以下是实例生命周期的图表。您现在不需要完全理解所有内容,但随着您学习和构建更多内容,它将是一个有用的参考。