首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 4 章 TypeScript编程进阶
4.1 使用泛型进行编程
4.1.1 泛型的简单使用
4.1.2 在类和接口中使用泛型
4.1.3 对泛型进行约束
4.2 迭代器与装饰器
4.2.1 关于迭代器
4.2.2 关于装饰器
4.2.3 装饰器的组合与装饰器工厂
4.3 命名空间与模块
4.3.1 命名空间的应用
4.3.2 使用模块
第 5 章 Vue中的模板
5.1 模板基础
5.1.1 模板插值
5.1.2 模板指令
5.2 条件渲染
5.2.1 使用v-if指令进行条件渲染
5.2.2 使用v-show指令进行条件渲染
5.3 循环渲染
5.3.1 v-for指令的使用方法
5.3.2 v-for指令的高级用法
5.4 范例:待办任务列表
5.4.1 使用HTML搭建应用框架结构
5.4.2 实现待办任务列表逻辑
第 6 章 Vue组件的属性和方法
6.1 属性与方法基础
6.1.1 属性基础
6.1.2 方法基础
6.2 计算属性和侦听器
6.2.1 计算属性
6.2.2 使用计算属或函数
6.2.3 计算属性的赋值
6.2.4 属性侦听器
6.3 进行函数限流
6.3.1 手动实现一个简易的限流函数
6.3.2 使用Lodash库进行函数限流
6.4 表单数据的双向绑定
6.4.1 文本输入框
6.4.2 多行文本输入区域
6.4.3 复选框与单选框
6.4.4 选择列表
6.4.5 两个常用的修饰符
6.5 样式绑定
6.5.1 为HTML标签绑定class属性
6.5.2 绑定内联样式
6.6 范例:用户注册页面
6.6.1 搭建用户注册页面
6.6.2 实现注册页面的用户交互
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(二)
小册名称:TypeScript和Vue从入门到精通(二)
### 第5章 Vue中的模板 在Vue.js框架中,模板是构建用户界面的基石。Vue通过其独特的模板语法,允许开发者以声明式的方式将DOM绑定到底层Vue实例的数据上。这种数据驱动的视图更新机制,极大地简化了前端开发流程,使得开发者能够更专注于业务逻辑的实现,而非繁琐的DOM操作。本章将深入探讨Vue中的模板机制,包括其基础语法、指令、条件渲染、列表渲染、插槽(Slots)以及模板编译过程。 #### 5.1 模板基础 Vue模板是HTML的扩展,它允许你在HTML中声明式地绑定数据。Vue模板被编译成虚拟DOM渲染函数,这些函数能够高效地更新真实DOM。Vue模板的语法简洁且易于理解,主要包括插值表达式、指令、组件等元素。 ##### 5.1.1 插值表达式 插值表达式是最基本的模板语法,用于文本插值。使用双大括号`{{ }}`包裹的表达式会被Vue解析并替换为相应的数据值。例如: ```html <span>{{ message }}</span> ``` 如果Vue实例的`data`属性中包含`message: 'Hello, Vue!'`,则上述模板将渲染为`<span>Hello, Vue!</span>`。 ##### 5.1.2 原始HTML 在Vue模板中,双大括号插值表达式默认会转义HTML标签,以防止XSS攻击。如果你需要输出真正的HTML,可以使用`v-html`指令: ```html <div v-html="rawHtml"></div> ``` 这里,`rawHtml`必须是Vue实例`data`属性中的一个字符串,它将被渲染为实际的HTML元素。 #### 5.2 指令 Vue模板中的指令(Directives)带有`v-`前缀的特殊属性。指令提供了将模板与Vue实例的响应式数据绑定起来的强大功能。 ##### 5.2.1 绑定属性 `v-bind`指令用于响应式地更新HTML属性。当绑定的数据变化时,对应的HTML属性也会自动更新。简写形式为`:`。 ```html <a v-bind:href="url">Link</a> <!-- 或简写为 --> <a :href="url">Link</a> ``` ##### 5.2.2 事件监听 `v-on`指令用于监听DOM事件,并在触发时执行一些JavaScript代码。简写形式为`@`。 ```html <button v-on:click="doSomething">Click me</button> <!-- 或简写为 --> <button @click="doSomething">Click me</button> ``` 在Vue实例的`methods`中定义`doSomething`方法,当按钮被点击时,该方法将被调用。 ##### 5.2.3 条件渲染 Vue提供了`v-if`、`v-else-if`、`v-else`指令来实现条件渲染。这些指令根据表达式的真假值来插入或移除元素。 ```html <p v-if="seen">Now you see me</p> <p v-else>Now you don't</p> ``` `v-show`指令也可以用于条件渲染,但与`v-if`不同的是,`v-show`只是简单地切换元素的CSS属性`display`。 ##### 5.2.4 列表渲染 `v-for`指令基于一个数组来渲染一个列表。Vue使用基于源数据重复渲染元素。 ```html <ul> <li v-for="(item, index) in items" :key="index"> {{ item.text }} </li> </ul> ``` 注意,使用`v-for`时,应该为每个列表项提供一个唯一的`key`值,以优化DOM的重新渲染过程。 #### 5.3 插槽(Slots) 插槽是一种让父组件向子组件中插入HTML或模板片段的机制。Vue提供了默认插槽和具名插槽两种形式。 ##### 5.3.1 默认插槽 子组件模板中,使用`<slot></slot>`作为插槽的占位符,父组件可以通过在子组件标签内部放置内容来填充这个插槽。 ```html <!-- 子组件 --> <template> <div> <h2>我是子组件</h2> <slot></slot> </div> </template> <!-- 父组件 --> <child-component> <p>这是传递给子组件的内容</p> </child-component> ``` ##### 5.3.2 具名插槽 当子组件需要多个插槽时,可以给`<slot>`元素命名,并在父组件中通过`template`标签的`v-slot:name`指令(或简写为`#name`)来指定内容应该放在哪个插槽中。 ```html <!-- 子组件 --> <template> <div> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> <!-- 父组件 --> <child-component> <template v-slot:header> <h1>标题</h1> </template> <p>主体内容</p> <template v-slot:footer> <p>页脚信息</p> </template> </child-component> ``` #### 5.4 模板编译过程 Vue模板在运行时会被编译成渲染函数,这些渲染函数会生成虚拟DOM树,最终由Vue的虚拟DOM系统来高效地更新真实DOM。了解这一过程有助于深入理解Vue的工作原理。 1. **模板解析**:Vue的编译器首先解析模板字符串,将其转换成AST(抽象语法树)。这一过程中,会识别出模板中的指令、插值表达式等Vue特有的语法。 2. **优化**:对AST进行优化,标记静态节点,以便在后续的DOM更新过程中跳过不必要的比较和更新。 3. **生成代码**:将优化后的AST转换成渲染函数代码。这些渲染函数是纯JavaScript函数,接受Vue实例的上下文作为参数,并返回虚拟DOM节点。 4. **虚拟DOM**:渲染函数生成的虚拟DOM节点会与上一次渲染生成的虚拟DOM树进行比较(使用高效的diff算法),以决定需要更新的真实DOM部分。 5. **DOM更新**:最后,Vue的虚拟DOM系统会基于比较结果,最小化地更新真实DOM,以实现界面的响应式更新。 #### 总结 Vue中的模板是构建动态Web界面的强大工具。通过插值表达式、指令、条件渲染、列表渲染和插槽等机制,Vue模板提供了一种声明式的方式来描述视图层。理解Vue模板的工作原理,包括其基础语法、指令的使用、插槽的灵活应用以及模板编译过程,对于深入掌握Vue框架至关重要。随着Vue生态的不断发展,新的模板语法和特性也将不断涌现,持续学习并实践这些新知识,将有助于提升前端开发效率和质量。
上一篇:
4.3.2 使用模块
下一篇:
5.1 模板基础
该分类下的相关小册推荐:
Vue原理与源码解析
VUE组件基础与实战
Vue.js从入门到精通(四)
Vue面试指南
TypeScript和Vue从入门到精通(五)
Vue源码完全解析
移动端开发指南
Vue.js从入门到精通(二)
Vue.js从入门到精通(一)
vue项目构建基础入门与实战
Vue.js从入门到精通(三)
TypeScript和Vue从入门到精通(三)