千锋 Vue 详细笔记整理 1

简介: 千锋 Vue 详细笔记整理

一、vue 的简介

1.1 使用 JQuery 的复杂性问题

  • 使用 JQuery 进行前后端分离开发,既可以实现前后端交互 (ajax) ,又可以完成数据渲染
  • 存在的问题: JQuery 需要通过 HTML 标签拼接、DOM 节点操作完成数据的显示,开发效率低且容易出错,渲染效率较低
  • vue 是继 JQuery 之后的又一优秀的前端框架:专注于前端数据的渲染 ———— 语法简单、渲染效率高

1.2 VUE 简介

1.2.1 前端框架

  • 前端三框架:HTML、CSS、JavaScript
  • HTML 决定网页结构
  • CSS 决定显示效果
  • JavaScript 决定网页功能 (交互、数据显示)
  • UI 框架:(只提供样式、显示效果)
  • Bootstrap
  • amazeUI
  • Layui
  • JS 框架:
  • JQuery (JQuery UI)
  • React
  • angular
  • nodejs ---- 后端开发
  • vue 集各种前端框架的优势发展而来

1.2.2 MVVM

项目结构经历的三个阶段:

后端 MVC :可以理解为单体结构,流程控制是由后端控制器来完成

前端 MVC :前后端分离开发,后端只负责接收响应请求

MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已

MVVM 前端请求后端接口,后端返回数据,前端接收数据,并将接收到的数据设置为 “VM”,HTML 从 vm 取值

  • M model 数据模型,指的是后端接口返回的数据
  • V view 视图
  • VM ViewModel 视图模型 数据模型与视图之间的桥梁,后端返回的 model 转换前端所需的 vm,视图层可以直接从 vm 中提取数据

Model-View-ViewModel —— 概念图

二、 vue 入门使用

Vue (读音 /vju/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

2.1 vue 的引入

  • 离线引用:下载 vue 的 js 文件,添加到前端项目,在网页中通过 script 标签引用 vue.js 文件
  • CDN 引用:
    直接使用在线 CDN 的方式引入

2.2 入门案例 – Hello World

文本:数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:{{message}}

  1. 创建一个 HTML 文件
  2. 引入 vue.js 文件
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

示例:

从 0 开始: {{message}}

<script type="text/javascript">
    var vm = new Vue({
        el: '#app-1',
        data: {
            message: 'Hello World!'
        }
    })
</script>

ca3fa2453b524b4f8603e116e7f0b103.png

Mustache 标签将会被替代为对应数据对象上 message property 的值。无论何时,绑定的数据对象上 message property 发生了改变,插值处的内容都会更新。

三、 vue 的语法

3.1 基本类型数据和字符串

<div id="app-2">
    {{code}}
    从 0 开始: {{message}}
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: '#app-2',
        data: {
            code: 1_3_3,
            message: 'Hello World!'
        }
    })
</script>

29bc03c732ad416ca49f852a1d3166b9.png

3.2 对象类型数据

  • 支持 ognl 语法
    学号:{{stu.stuNum}}
    姓名:{{stu.stuName}}
  • 性别:{{stu.stuGender}}
    年龄:{{stu.stuAge}}


3.3 条件 v-if

v-if : 用来控制切换一个元素是否显示 (底层控制是 DOM 元素,操作 DOM)

注:在浏览器中网页打开这个文件 F12,从标签上可以看到没有 stu.stuGender == 'F' 对应的元素。即条件不成立,网页不会渲染该 DOM,连标签都不会有。

<div id="app-4">
    学号:{{stu.stuNum}} <br />
    姓名:{{stu.stuName}} <br />
    性别:
    <label v-if="stu.stuGender == 'M'">
    </label>
    <label v-if="stu.stuGender == 'F'">
    </label>
    <br />
    年龄:{{stu.stuAge}}
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: '#app-4',
        data: {
            stu: {
                stuNum: '10001',
                stuName: '张三',
                stuGender: 'M',
                stuAge: 20
            }
        }
    })
</script>

968edf0a6e4941cba7118687ca8a4482.png

3.4 循环 v-for

v-for 指令基于一个数组来渲染一个列表。

v-for 块中,我们可以访问所有父作用域的 property。v-for 还支持一个可选的第二个参数,即当前项的索引。

<div id="app-5">
    <table border="1" cellspacing="0" width="400">
        <tr>
            <th>序号</th>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr v-for="(stu, index) in stus">
            <td>{{index + 1}}</td>
            <td>{{stu.stuNum}}</td>
            <td>{{stu.stuName}}</td>
            <td>
                <table v-if="stu.stuGender == 'M'">
                </table>
                <table v-if="stu.stuGender == 'F'">
                </table>
            </td>
            <td>{{stu.stuAge}}</td>
        </tr>
    </table>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: '#app-5',
        data: {
            stus: [
                {
                    stuNum: '10001',
                    stuName: '张三',
                    stuGender: 'M',
                    stuAge: 20
                },
                {
                    stuNum: '10002',
                    stuName: '李四',
                    stuGender: 'M',
                    stuAge: 23
                },
                {
                    stuNum: '10003',
                    stuName: '郑红',
                    stuGender: 'F',
                    stuAge: 19
                }
            ]
        }
    })
</script>

c526172d62f747749ee43795d881cb3b.png

3.5 绑定标签属性 v-bind

  • v-bind:属性名 缩写:属性名


</tr>
</table>
序号 学号 姓名 性别 年龄
{{index + 1}} {{stu.stuNum}} {{stu.stuName}}

{{stu.stuAge}}


3.6 表单标签的双向绑定 v-model

  • 只能使用在表单输入标签
  • v-model:value 可以简写为 v-model

  • 双向绑定:{{message}}

四、vue 实例

每个使用 vue 进行数据渲染的网页文档都需要创建一个 vue 实例 — — ViewModel

4.1 vue 实例的生命周期

vue 实例生命周期 — — vue 实例从创建到销毁的过程

  • 创建 vue 实例 (初始化 data,加载 el)
  • 数据挂载 (将 vue 实例 data 中的数据渲染到网页 HTML 标签)
  • 重新渲染 (当 vue 的 data 数据发生变化,会重新渲染到 HTML 标签)
  • 销毁实例

创建对象 ---- 属性初始化 ---- 获取属性值 ----- GC 回收

4.2 钩子函数

为了便于开发者在 vue 实例生命周期的不同阶段进行特定的操作,vue 在生命周期四个阶段的前后分别提供了一个函数,这个函数无需开发者调用,当 vue 实例到达生命周期的指定阶段会自动调用对应的函数。

<div id="app-8">
    <label v-once>{{message}}</label><br />
    <label>{{message}}</label><br />
    <input type="text" v-model="message">
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: '#app-8',
        data: {
            message: 'Hello World!!'
        },
        beforeCreate: function () {
            // 1. data 初始化之前执行,不能操作 data
        },
        create: function () {
            // 2. data 初始化之后执行,模板加载之前,可以修改 / 获取 data 中的值
            console.log(this.message);
            // this.message = 'Hello World!! create()';
        },
        beforeMount: function () {
            // 3. 模板加载之后,数据初始渲染(挂载)之前,可以修改 / 获取 data 中的值
            // this.message = 'Hello World!!  beforeMount';
        },
        mounted: function () {
            // 4. 数据初始渲染(挂载)之后,可以对 data 中的变量进行修改,但是不会影响 v-once 的渲染
            // this.message = "Hello World!!  mounted";
        },
        beforeUpdate: function () {
            // 5. 数据渲染之后,当 data 中的数据发生变化触发重新渲染,渲染之前执行此函数
            console.log("---" + this.message);
            this.message = 'Hello World!!  beforeUpdate';
        },
        update: function () {
            // 6. data 数据被修改之后,重新渲染到页面之后
            // this.message = "Hello World!!   update";
        },
        beforeDestroy: function () {
            // 7. 实例销毁之前
        },
        destroy: function () {
            // 8. 实例销毁之后
        }
    })
</script>


相关文章
|
7天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
7天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
7天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
13天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
13天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
13天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
13天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
12天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
14天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
12天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面