# h5-2103-三 **Repository Path**: htmhl/h5-2103-tris ## Basic Information - **Project Name**: h5-2103-三 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-17 - **Last Updated**: 2021-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Vue MVVM 架构 - M - Model,模型、数据 - V - View,视图 - VM - ViewModel,关联 Model 与 View,实现双向数据绑定,View 中的变化能够引起 Model 自动变化,Model 的变化也能引起 View 的自动重新渲染。 [官网](https://cn.vuejs.org/) ## 体验 ### 兼容性 Vue **不支持** IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性(利用 Object.defineProperty() 实现数据劫持)。 ### 安装 [开发版本](https://cn.vuejs.org/js/vue.js):包含完整的警告和调试模式 [生产版本](https://cn.vuejs.org/js/vue.min.js):删除了警告 ### 声明式渲染 ```js const vm = new Vue({ el: '#app', // View data: { // Model products: [], cart: [] }, methods: { // 方法 addToCart() {}, removeFromCart() {}, add() {} } }) console.log(vm.cart) console.log(vm.$data.cart) ``` 说明: - data 中定义的所有数据(除以 `$` 或 `_` 开头的属性),会被直接挂载到创建的 Vue 实例下,即可以使用 `vm.cart` 获取在 data 中定义的 cart 数组对象 - $data 属性,表示的是创建 Vue 实例时指定的 data 数据对象。 - methods 中定义的各方法也会被直接挂载到 Vue 实例下。 - methods 中定义的各方法内部使用到的 this 通常指向的是当前创建的 `Vue` 实例本身 ## 模板语法 ### 插值 ``` {{ expression }} ``` {{ }} 双花括号内部写的是 JS 表达式,通常使用的是 data 中绑定的属性,无论何时,只要 data 中绑定的对应属性数据发生了变化,页面 `{{ }}` 插值位置处就会**响应式更新**。 {{ }} 双花括号内部的表达式内容会被转义,以防止 XSS 攻击。 ### 原始 html 由于 `{{}}` 会转义表达式内容,如果确实需要渲染 html 文本,可使用 `v-html` 指令来实现: ```html
``` **注意:**一般使用 `v-html` 来渲染可信 html 数据,通常不用其渲染用户输入的数据(因为可能导致 XSS 跨站脚本攻击) ### 属性绑定 不能在绑定标签中属性值时使用 `{{}}` 语法,而是需要使用 `v-bind` 指令(或其简写形式:`:`) ```html
这是一段文本内容
这是一段文本内容
``` ### 指令(directive) 指令是在 html 标签中的一个有特殊函义的属性,其属性值为 JS 表达式。 - v-html:渲染 html 文本 - v-text:渲染纯文本 - v-bind:动态绑定属性,可简写为 `:` - v-on:绑定事件处理程序,可简写为 `@` - v-for:列表渲染,用于对数组或对象属性实现循环遍历(迭代) ```html
{{item}}
{{item}}
{{ index }} - {{item}}
{{ index }} - {{item}}
{{value}}
{{value}}
{{value}}
{{value}}
{{value}}
{{value}}
``` 列表渲染时,如果调用数组的**变异方法**(变更方法:调用这些方法后会改变原数组本身)修改数组元素,则页面会响应式更新,数组有7个变异方法: - push()/pop() - unshift()/shift() - splice() - sort()/reverse() 如果调用的是非变异方法(不影响原数组本身的方法,如:slice()、filter()、concat()),又想将其返回的新数组在页面中响应式渲染,则可以使用替换数组的方式,即使用赋值运算符 `=` 重新为数组变量赋值。 - v-if、v-else-if、v-else:条件渲染 v-if 满足条件的元素会被显示,不满足条件的元素会被隐藏,v-if 操作的是 DOM 树节点的添加或销毁 - v-show:条件渲染 v-show 满足条件的元素会被显示,不满足条件的元素会被隐藏,v-show 操作的是节点的 CSS 样式中的 display(隐藏则为 `display: none`,显示则去掉 `display` 属性设置) **v-if 与 v-show 的区别:** `v-if` 有更高的切换开销,而 `v-show` 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 `v-show` 较好;如果在运行时条件很少改变,则使用 `v-if` 较好。 **v-if 与 v-for 同时使用:** 在 vue2.x 版本中,在同一个节点中同时使用 `v-if` 与 `v-for` 指令,`v-for` 优选级更高。**不推荐在同一个节点中同时使用这两个指令。** - v-model:双向数据绑定,通常用于表单元素值的双向绑定。 你可以用 `v-model` 指令在表单 ``、`