vue框架简介

MVVM框架概述

 

 

什么是vue

是一套构建用户界面的渐进式(用到哪一块就用哪一块,不需要全部用上)前端框架,Vue 的核心库只关注视图层

 

 

vue的兼容性

Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 Vue.js 支持所有兼容 ECMAScript 5 的浏览器

 

 

vue学习资源

vue.js中文官网:http://cn.vuejs.org/

vue.js源码:https://github.com/vuejs/vue

vue.js官方工具:https://github.com/vuejs

vue.js官方论坛:forum.vuejs.org

 

 

对比其他框架-React

React 和 Vue 有许多相似之处,它们都有使用 Virtual DOM;提供了响应式(Reactive)和组件化(Composable)的视图组件。将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。React 比 Vue 有更丰富的生态系统

都有支持native的方案,React的RN,vue的Wee下

都支持SSR服务端渲染

都支持props进行父子组件间的通信

性能方面:React 和 Vue 在大部分常见场景下都能提供近似的性能。通常 Vue 会有少量优势,因为 Vue 的 Virtual DOM 实现相对更为轻量一些。

不同之处就是:

  • 数据绑定方面,vue实现了数据的双向数据绑定,react数据流动是单向的
  • virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制
  • state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中管理(如果要操作直接this.xxx)
  • 组件写法不一样, React推荐的做法是 JSX , 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,js写在同一个文件

 

 

对比其他框架-angular

在性能方面,这两个框架都非常的快,我们也没有足够的实际应用数据来下一个结论。如果你一定想看些数据的话,你可以参考这个第三方跑分。单就这个跑分来看,Vue 似乎比 Angular 要更快一些。

在大小方面,最近的 Angular 版本中在使用了 AOT 和 tree-shaking 技术后使得最终的代码体积减小了许多。但即使如此,一个包含了 vuex + vue-router 的 Vue 项目 (30kb gzipped) 相比使用了这些优化的 Angular CLI 生成的默认项目尺寸 (~130kb) 还是要小的多。

灵活性:Vue 相比于 Angular 更加灵活,Vue 官方提供了构建工具来协助你构建项目,但它并不限制你去如何组织你的应用代码。有人可能喜欢有严格的代码组织规范,但也有开发者喜欢更灵活自由的方式。

 

 

vue.js的核心特点—响应的数据绑定

传统的js操作页面:在以前使用js操作页面的时候是这样的,需要操作某个html元素的数据,就的使用js代码获取元素然后在处理业务逻辑

响应式数据绑定的方式操作页面,可以直接使用像下面代码那样的写法就可以将数据填充到页面中


 
 
  1. <template>
  2. <div id="app">
  3. {{ message }}
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'app',
  9. data () {
  10. return {
  11. message: 'Welcome to Your Vue.js App'
  12. }
  13. }
  14. }
  15. </script>
  16. <style>
  17. </style>

 

 

vue.js的核心特点—可组合的视图组件

一个页面映射为组件树。划分组件可维护、可重用、可测试,也就是一个页面由多个组件组合而成

vue中实现组件引入示例

第一步:import导入需要引入的组件文件;

第二步:注册组件;

第三步:在需要引入组件的文件中加上组件标签(这个标签的标签名就是注册的组件名字,多个单词的和这里有xx-xx的形式)

需要注意的是:组件可以嵌套引入,也就是说组件可以引入其他组件

首先创建一个组件,用于被引入的组件,组件名字叫Hello.vue


 
 
  1. <template>
  2. <div class="hello">
  3. <h2>Essential Links </h2>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'hello'
  9. }
  10. </script>
  11. <!-- Add "scoped" attribute to limit CSS to this component only -->
  12. <style scoped>
  13. </style>

然后在需要引入的组件中,先使用import导入组件

import Hello from './components/Hello'
 
 

然后使用components注册这个组件


 
 
  1. components: {
  2. Hello
  3. }

 在需要引入组件的文件中加上组件标签(这个标签的标签名就是注册的组件名字,多个单词的和这里有xx-xx的形式)

<hello></hello>
 
 

 
 
  1. <template>
  2. <div id="app">
  3. {{ message }}
  4. <hello> </hello>
  5. </div>
  6. </template>
  7. <script>
  8. import Hello from './components/Hello'
  9. export default {
  10. name: 'app',
  11. data () {
  12. return {
  13. message: 'Welcome to Your Vue.js App'
  14. }
  15. },
  16. components: {
  17. Hello
  18. }
  19. }
  20. </script>
  21. <style>
  22. </style>

单文件组件:Js,css,html 存在一个文件中,是一个单文件组件,下面vue模板文件里的Hello.vue就是一个单文件组件


 
 
  1. <template>
  2. <div class="hello">
  3. <h2>{{ msg }} </h2>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'hello',
  9. data () {
  10. return {
  11. msg: 'Hello Vue'
  12. }
  13. }
  14. }
  15. </script>
  16. <!-- Add "scoped" attribute to limit CSS to this component only -->
  17. <style scoped>
  18. h1, h2 {
  19. font-weight: normal;
  20. }
  21. </style>

 

 

vue.js的核心特点—虚拟DOM

虚拟DOM的概述

运行的js速度是很快的,大量的操作DOM就会很慢,时常在更新数据后会重新渲染页面,这样造成在没有改变数据的地方也重新渲染了DOM节点,这样就造成了很大程度上的资源浪费。

利用在内存中生成与真实DOM与之对应的数据结构,这个在内存中生成的结构称之为虚拟DOM

当数据发生变化时,能够智能地计算出重新渲染组件的最小代价并应用到DOM操作上


 
 
  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. Vue.config.productionTip = false
  6. /* eslint-disable no-new */
  7. new Vue({
  8. el: '#app',
  9. template: '<App/>',
  10. components: { App }
  11. })
  12. console.dir( document)

 

 

vue.js的核心特点—MVVM模式

MVVM概述:M:Model数据模型 , V:view 视图模板  , vm:view-Model:视图模型

vue的MVVM实例(双向数据绑定):当输入框输入数据的时候,相应的message也会改变


 
 
  1. <template>
  2. <div id="app">
  3. <input type="text" v-model="message"/>
  4. {{ message }}
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: 'app',
  10. data () {
  11. return {
  12. message: 'Welcome'
  13. }
  14. }
  15. }
  16. </script>
  17. <style>
  18. </style>

vue是如何实现双向数据绑定的:当数据发生改变—自动更新视图。利用Object.definedProperty中的setter/getter代理数据,监控对数据的操作


 
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title </title>
  6. </head>
  7. <body>
  8. <input type="text" id="username"> <br />
  9. <span id="uName"> </span>
  10. <script>
  11. var obj = {
  12. pwd: '123'
  13. }
  14. Object.defineProperty(obj, 'username', {
  15. set: function (val) {
  16. document.getElementById( 'uName').innerText = val
  17. document.getElementById( 'uNmae').value = val
  18. console.log( 'set')
  19. },
  20. get: function () {
  21. }
  22. })
  23. document.getElementById( 'username').addEventListener( 'keyup' , function () {
  24. obj.username = event.target.value
  25. })
  26. </script>
  27. </body>
  28. </html>

 

 

vue.js的核心特点—声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进 DOM,初始化根实例,vue自动将数据绑定在DOM模板上

声明式渲染与命令式渲染区别

声明式渲染:所谓声明式渲染只需要声明在哪里,做什么,而无需关心如何实现

命令式渲染:需要具体代码表达在哪里,做什么,如何实践

需求:求数组中每一项的倍数,放在另一个数组中实例

命令式渲染


 
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title </title>
  6. </head>
  7. <body>
  8. <script>
  9. var arr = [ 1, 2, 3, 4, 5]
  10. var newArr = []
  11. for ( var i = 0; i < arr.length; i++) {
  12. newArr.push(arr[i] * 2)
  13. }
  14. console.log(newArr)
  15. </script>
  16. </body>
  17. </html>

声明式渲染


 
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title </title>
  6. </head>
  7. <body>
  8. <script>
  9. var arr = [ 1, 2, 3, 4, 5]
  10. var newArr = arr.map( function (item) {
  11. return item * 2
  12. })
  13. console.log(newArr)
  14. </script>
  15. </body>
  16. </html>

 

    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值