Vue——邂逅Vue
Vue——Vue的基础语法
Vue——Vue的组件化
Vue——slot_插槽的基本使用

文章目录

  • 1:为什么学习Vue
  • 2:Vue介绍
  • 3:Vue初体验
  • 4:Vue的实例
    • 4.1 创建一个vue实例
    • 4.2 数据与方法
    • 4.3 实例生命周期钩子
    • 4.4生命周期图示
  • 5:MVVM模型

1:为什么学习Vue

近两年前端技术变革速度太快,vue不论针对web项目开发,网站制作,还是app,小程序开发,都越来越流行,其便捷性及易用程度都让你不得不考虑去学习。如果仅仅还是传统的各种cms开源代码建站仿站,显然你的技术已经跟不上了,如果你开发的项目数据交互较多,并且前后端分离明显,那么vue将会使你未来技术长足成长的不二选择。如果你现在正在换工作,你会发现招聘前端的需求中, 10个有8个都对Vue有或多或少的要求。

2:Vue介绍

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

什么是渐进式呢?

1:渐进式意味着你可以将Vue作为你应用的一部分嵌入其中 ,带来更丰富的交互体验。
2:或者如果你希望将更多的业务逻辑使用Vue实现,那么Vue的核心库以及其生态系统。
3:比如Core+Vue-router+Vuex ,也可以满足你各种各样的需求。

  • Vue有很多特点和Web开发中常见的高级功能

1:解耦视图和数据
2:可复用的组件
3:前端路由技术
4:状态管理
5:虚拟DOM

  • Vue特点
    组件化: 其中以 React 的组件化最为彻底,甚至可以到函数级别的原子组件,高度的组件化可以是我们的工程易于维护、易于组合拓展。
    天然分层: JQuery 时代的代码大部分情况下是面条代码,耦合严重,现代框架不管是 MVC、MVP还是MVVM 模式都能帮助我们进行分层,代码解耦更易于读写。
    生态: 现在主流前端框架都自带生态,不管是数据流管理架构还是 UI 库都有成熟的解决方案。

这些特点,我们不需要一个个去记住 ,我们在后面的学习和开发中慢慢体会到

  • 学习Vue的前提?
    从零学习Vue开发,并不需要你具备其他类似于Angular,React ,甚至是jQuery的经验。
    但是你需要具备一定的HTML、 CSS、 JavaScript基础。

3:Vue初体验

我们也可以创建一个 .html 文件,然后通过如下方式引入 Vue:

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->

或者

<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->

代码示例

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">// Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:<h1> {{message}}</h1><h1> {{data}}</h1><ul><li v-for="item in movies">{{item}}</li></ul><h2>当前计数{{counter}}</h2><button v-on:click="add">+</button>,<button v-on:click="sub">-</button>    <span v-bind:title="message">鼠标悬停几秒钟查看此处动态绑定的提示信息!</span></div><script>const demo=new Vue({el: '#app',data: {message: '你好vue',data: "9点",movies: ['战狼','人民的名义','哪吒'],counter: 0,messages: '页面加载于 ' + new Date().toLocaleString()},methods: {add: function(){console.log("add执行");this.counter++;},sub: function(){this.counter--;}}})</script></body>
</html>

我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。

注意我们不再和 HTML 直接交互了。一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部。

为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

注意在 add和sub方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。

这里我们还遇到了一点新东西。你看到的 v-bind attribute 被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊 attribute。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title attribute 和 Vue 实例的 message property 保持一致”。

如果你再次打开浏览器的 JavaScript 控制台,输入 app2.message = ‘新消息’,就会再一次看到这个绑定了 title attribute 的 HTML 已经进行了更新。
根据上面的代码,我们还得出下面的三张图片的结论



进行测试结果如下

4:Vue的实例

4.1 创建一个vue实例

每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

var vm = new Vue({// 选项
})

虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例。

当创建一个 Vue 实例时,你可以传入一个选项对象。这小结主要描述的就是如何使用这些选项来创建你想要的行为。作为参考,也可以在 API 文档中浏览完整的选项列表。
API

一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。举个例子,一个 todo 应用的组件树可以是这样的:

根实例
└─ TodoList├─ TodoItem│  ├─ DeleteTodoButton│  └─ EditTodoButton└─ TodoListFooter├─ ClearTodosButton└─ TodoListStatistics

我们会在稍后的组件系统章节具体展开。不过现在,只需要明白所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象 (一些根实例特有的选项除外)。

4.2 数据与方法

当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

// 我们的数据对象
var data = { a: 1 }// 该对象被加入到一个 Vue 实例中
var vm = new Vue({data: data
})// 获得这个实例上的 property
// 返回源数据中对应的字段
vm.a == data.a // => true// 设置 property 也会影响到原始数据
vm.a = 2
data.a // => 2// ……反之亦然
data.a = 3
vm.a // => 3

当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的。也就是说如果你添加一个新的 property,比如: vm.b = ‘hi’
那么对 b 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个 property,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:

data: {newTodoText: '',visitCount: 0,hideCompletedTodos: false,todos: [],error: null
}

注意:这里唯一的例外是使用 Object.freeze(),这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。如下实例

var obj = {foo: 'bar'
}Object.freeze(obj)new Vue({el: '#app',data: obj
})
<div id="app"><p>{{ foo }}</p><!-- 这里的 `foo` 不会更新! --><button v-on:click="foo = 'baz'">Change it</button>
</div>

除了数据 property,Vue 实例还暴露了一些有用的实例 property 与方法。它们都有前缀 $,以便与用户定义的 property 区分开来。例如:

var data = { a: 1 }
var vm = new Vue({el: '#example',data: data
})vm.$data === data // => true
vm.$el === document.getElementById('example') // => true// $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {// 这个回调将在 `vm.a` 改变后调用
})

4.3 实例生命周期钩子

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

比如 created 钩子可以用来在一个实例被创建之后执行代码:

new Vue({data: {a: 1},created: function () {// `this` 指向 vm 实例console.log('a is: ' + this.a)}
})
// => "a is: 1"

也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mounted、updated 和 destroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

4.4生命周期图示

下图展示了实例的生命周期。我们不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。

           beforeCreate() {console.log("=========beforeCreate=============");console.log("数据模型未加载:" + this.name, this.num);console.log("方法未加载:" + this.show());console.log("html模板未加载:" + document.getElementById("num"));},created: function () {console.log("=========created=============");console.log("数据模型已加载:" + this.name, this.num);console.log("方法已加载:" + this.show());console.log("html模板已加载:" + document.getElementById("num"));console.log("html模板未渲染:" + document.getElementById("num").innerText);},beforeMount() {console.log("=========beforeMount=============");console.log("html模板未渲染:" + document.getElementById("num").innerText);},mounted() {console.log("=========mounted=============");console.log("html模板已渲染:" + document.getElementById("num").innerText);},beforeUpdate() {console.log("=========beforeUpdate=============");console.log("数据模型已更新:" + this.num);console.log("html模板未更新:" + document.getElementById("num").innerText);},updated() {console.log("=========updated=============");console.log("数据模型已更新:" + this.num);console.log("html模板已更新:" + document.getElementById("num").innerText);}

5:MVVM模型


View层:视图层

  • 在我们前端开发中,通常就是DOM层。其主要的作用是给用户展示各种信息。

Model层:数据层

  • 数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据。在我们计数密的案例中,就是后面抽取出来的obj, 当然,里面的数据可能没有这么简单。

VueModel层:视图模型层

  • 视图模型层是View和Model沟通的桥梁。

  • 一方面它实现了Data Binding, 也就是数据绑定将Model的改变实时的反应到View中

  • 另一方面它实现了DOM Listener, 也就是DOM监听当DOM发生一些事件(点击、滚动、touch等)时, 可以监听到,并在需要的情况下改变对应的Data.

我们对上面的计数器模型作如下解释

MVC和MVVM的关系图解

Vue——邂逅Vue相关推荐

  1. vue点击按钮切换显示不同内容_邂逅Vue

    01 什么是Vue.js Vue (读音 /vjuː/,类似于view) 是一套用于构建用户界面的渐进式框架. 看到这里,你就会问了,什么是渐进式? 渐进式就是你可以将Vue作为一个项目中的部分组件改 ...

  2. Vue3 + TS(一)- 邂逅Vue

    一.认识Vue.js Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架. 1.1 Vue 的安装 安装方式: CDN引入: 下载Vue的js文件,并手动引入: 通过 ...

  3. 简单介绍Vue之vue.$set()方法源码案例

    这篇文章主要介绍了Vue之vue.$set()方法源码案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下 在使用vue开发项目的过程中,经常会遇到这样 ...

  4. vuejs和html语言一样么,vue和vue.js有区别吗?

    vue和vue.js没有区别,vue就是vue.js的简称.vue是前端的主流框架之一,和Angular.js.React.js 一起,并成为前端三大主流框架! Vue (读音 /vjuː/,类似于 ...

  5. Vue:Vue的< span >文字怎么加粗?

    Vue:Vue的< span >文字怎么加粗? 资源 span文字加粗_span盒子对象内字体加粗

  6. Vue:Vue和ECharts,在Vue上进行可视化处理,在Vue上画图

    Vue:Vue和ECharts,在Vue上进行可视化处理,在Vue上画图 一.预科知识 Vue CLI ECharts 二.资源 在Vue中使用echarts 如何在 Vue 项目中使用 echart ...

  7. Vue 脚手架||Vue 脚手架的基本用法

    Vue 脚手架 Vue 脚手架用于快速生成 Vue 项目基础架构,其官网地址为:https://cli.vuejs.org/zh/ npm install -g @vue/cli 检测是否安装成功  ...

  8. vue是什么_什么是VUE?vue有什么作用?

    什么是vue?Vue.js是一套构建用户界面的渐进式框架,Vue 采用自下向上增量开发的设计,其核心库只关注视图层,易于上手,同时vue完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复 ...

  9. html页面渲染vue组件,Vue组件页面渲染的基本流程

    html: 组件页面渲染的基本流程 main.js: import Vue from "vue"; import Home from "./home.vue"; ...

最新文章

  1. 智能网联汽车到底该怎么玩?腾讯在成都放了个大招
  2. Nginx的proxy_cache缓存功能
  3. python pycharm如何全局(整个项目中)搜索指定代码?(CTRL+SHIFT+F)全局字符串搜索
  4. html 问号标签 提示cursor: help,css之cursor,float
  5. 【转】CSS3 圆角 阴影 渐变 透明 旋转等功能详述
  6. PHP time zone unknown Fail
  7. 案例-翻转的导航栏(CSS3)
  8. hik中心服务器登录失败,蒲公英云平台登录失败解决方案
  9. React怎样从函数中辨别类
  10. python里数字怎么表示_Python 中的数字—Python 学习笔记
  11. 以太坊上海协议之——达成Cosmos网络实现以太坊扩容协议
  12. 浅谈PMSM电机控制之Clark变换(详细推导及MATLAB仿真)
  13. MAD、AMV、MMD 的区别
  14. teamviewer linux centos,teamviewer Linux centos7安装使用详细
  15. PM2.5的加重,和建筑工地关系大不大?(附扬尘治理方案)
  16. “天使药丸”阿司匹林的前世今生
  17. request与response的笔记梳理
  18. 电脑有网但是浏览器无法显示网页
  19. 各品牌进入Bios方法,附U盘制作启动盘
  20. 网络协会评出十大流氓软件,3721位列榜首

热门文章

  1. 恒温恒湿试验箱制冷系统及工作原理
  2. CGB2105-Day-09笔记
  3. java 源码 股票_Java读取东方财富网上的股票信息源码
  4. 楼宇控制系统发展过程
  5. 苹果几是双卡双待_iphone11 pro苹果大革新,支持双卡双待
  6. 适合自学单片机c语言教材,单片机编程入门看什么书 盘点单片机初学者适合看的书...
  7. 长度单位换算python代码_长度单位换算的一种简便方法
  8. Openssl中chacha20-poly1305的使用
  9. 程序人生 - DCT、AT、CVT 到底哪个好?
  10. 通过网络地址下载图片示例