Vue的相关

Vue

Vue是一个前端js框架,由尤雨溪开发,是个人项目

Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vue1.0悄悄的问世了,它的优雅,轻便也吸引了一部分用户,开始收到关注,16年中旬,VUE2.0问世,这个时候vue不管从性能上,还是从成本上都隐隐超过了react,火的一塌糊涂,这个时候,angular开发团队也开发了angular2.0版本,并且更名为angular,吸收了react、vue的优点,加上angular本身的特点,也吸引到很多用户,目前已经迭代到5.0了。

学习vue是现在前端开发者必须的一个技能。

前端js框架到底在干嘛,为什么要用

js框架帮助开发者写js逻辑代码,在开发应用的时候js的功能划分为如下几点:

  1. 渲染数据
  2. 操作dom(写一些效果)
  3. 操作cookie等存储机制api

在前端开发中,如何高效的操作dom、渲染数据是一个前端工程师需要考虑的问题,而且当数据量大,流向较乱的时候,如何正确使用数据,操作数据也是一个问题

而js框架对上述的几个问题都有自己趋于完美的解决方案,开发成本降低。高性能高效率。唯一的缺点就是需要使用一定的成本来学习。

Vue官网介绍

vue是渐进式JavaScript框架

“渐进式框架”和“自底向上增量开发的设计”是Vue开发的两个概念

Vue可以在任意其他类型的项目中使用,使用成本较低,更灵活,主张较弱,在Vue的项目中也可以轻松融汇其他的技术来开发,并且因为Vue的生态系统特别庞大,可以找到基本所有类型的工具在vue项目中使用

特点:易用(使用成本低),灵活(生态系统完善,适用于任何规模的项目),高效(体积小,优化好,性能好)

Vue是一个MVVM的js框架,但是,Vue 的核心库只关注视图层,开发者关注的只是m-v的映射关系

与AngularJS的对比

Vue的很多api、特性都与angularJS相似,其实是因为Vue在开发的时候借鉴了很多AngularJS中的特点,而AngularJS中固有的缺点,在Vue中已经解决,也就是青出于蓝而胜于蓝,Vue的学习成本比AngularJS低很多,因为复杂性就低

AngularJS是强主张的,而Vue更灵活

Vue的数据流是单向的,数据流行更清晰

Angular里指令可以是操作dom的,也可以封装一段结构逻辑代码,例如:广告展示模块

Vue中的指令只是操作dom的,用组件来分离结构逻辑

AngularJS的性能比不上Vue

Vue的使用

Vue不支持IE8,因为使用了ES5的很多特性

可以直接通过script标签来引入vue.js,有开发版本和生产版本,开发版本一般我们在开发项目的时候引入,当最后开发完成上线的时候引入生产版本,开发版本没有压缩的,并且有很多提示,而生产版本全部删掉了

在Vue中提供了一个脚手架(命令行工具)可以帮我们快速的搭建基于webpack的开发环境...

Vue的实例

每一个应用都有一个根实例,在根实例里我们通过组件嵌套来实现大型的应用

也就是说组件不一定是必须的,但是实例是必须要有的

在实例化实例的时候我们可以传入一个;配置项,在配置项中设置很多属性方法可以实现复杂的功能

在配置中可以设置el的属性,el属性代表的是此实例的作用范围

在配置中同过设置data属性来为实例绑定数据

mvc/mvvm

阮大神博客

mvc 分为三层,其实M层是数据模型层,它是真正的后端数据在前端js中的一个映射模型,他们的关系是:数据模型层和视图层有映射关系,model改变,view展示也会更改,当view产生用户操作或会反馈给controller,controller更改model,这个时候view又会进行新的数据渲染

这是纯纯的MVC的模式,但是很多框架都会有一些更改

前端mvc框架,如angularjs,backbone:

会发现,用户可以直接操作controller(例如用户更改hash值,conrtoller直接监听hash值变化后执行逻辑代码,然后通知model更改)

控制器可以直接操作view,如果,让某一个标签获得进入页面获得焦点,不需要model来控制,所以一般会直接操作(angularJS,指令)

view可以直接操作model (数据双向绑定)

MVP:

mvp

view和model不能直接通信,所有的交互都由presenter来做,其他部分的通信都是双向的

view较薄 ,presenter较为厚重

MVVM:

mvvm

MVVM和MVP及其相似,只是view和viewmodel的通信是双向绑定,view的操作会自动的像viewmodel通过

v-for

在vue中可以通过v-for来循环数据的通知循环dom,语法是item in/of items,接收第二个参数是索引 (item,index) of items,还可以循环键值对,第一个参数是value,第二个是key,第三个依然是索引

v-on

在vue中还有v-on来为dom绑定事件,在v-on:后面加上要绑定的事件类型,值里可以执行一些简单javascript表达式:++ -- = ...

可以将一些方法设置在methods里,这样就可以在v-on:click的值里直接写方法名字可以,默认会在方法中传入事件对象,当写方法的时候加了()就可以传参,这个时候如果需要事件对象,那就主动传入$event

v-on绑定的事件可以是任意事件,v-on:可以缩写为@

为什么在 HTML 中监听事件?

你可能注意到这种事件监听的方式违背了关注点分离 (separation of concern) 这个长期以来的优良传统。但不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,它不会导致任何维护上的困难。实际上,使用 v-on 有几个好处:

  1. 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。
  2. 因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。
  3. 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。
响应式原理

因为vue是mvvm的框架,所以当数据变化的时候,视图会立即更新,视图层产生操作后会自动通知vm来更改model,所以我们可以实现双向数据绑定,而其中的原理就是实例会将设置的data逐个遍历利用Object.defineProperty给数据生成getter和setter,当数据变化地方时候setter会监听到并且通知对应的watcher工具进行逻辑运算会更新视图

声明式渲染

在vue中,我们可以先在vue实例中声明数据,然后通过{{}}等方式渲染在dom中


function foo(){// 第16行
    getName = function(){console.log(1)}
    return this
}
foo.getName = function(){console.log(2)}
foo.prototype.getName = function(){console.log(3)}
var getName = function(){console.log(4)}
function getName(){console.log(5)}

foo.getName()//2
//foo是一个函数,也可以说是一个对象,所以它也可以挂载一些属性和方法,18行在其上挂载了一个getName方法
//执行的结果是

getName()//4
//21行有一个全局函数,全局函数声明提前后被20行的getName覆盖,所以输出4

foo().getName()//1
//foo()执行完成后,将全局的getName也就是window.getName给更改后返回this,而在这里this执行的就是window,所以最后执行的就是window.getName,所以输出1

getName()//1
//在上面已经更改全局的getName,所以依然是1

new foo.getName()//2
//new 操作符在实例化构造器的时候,会执行构造器函数,也就是说,foo.getName会执行,输出2

new foo().getName()//3
//new操作符的优先级较高,所以会先new foo()得到一个实例,然后再执行实例的getName方法,这个时候,实例的构造器里没有getName方法,就会执行构造器原型上的getName方法

new new foo().getName()//3
//先执行new foo()得到一个实例,然后在new 这个实例的getName方法,这个时候会执行这个方法,所以输出3

//除了本地对象的方法,其他的函数都能new

响应式原理(mvvm)

//ES5中有Object.defineProperty()可以,为某一个对象的属性创建出setter和getter,setter和getter其实是两个工具函数,分别会在数据被更改或者被使用的时候触发

    // 准备给data设置一个msg属性,这个属性改变的时候,页面中的显示也会改变

    // var data = {msg:‘hello world‘}
    // a.innerHTML = data.msg

    // inp.oninput = function () {
    //     data.msg = this.value
    //     a.innerHTML = data.msg
    // }

    //M
    var data = {msg:‘hello world‘}

    //VM
    new Bue({
        data:data
    })

    //vm将model的数据显示在view上,当用户参数操作,会自动通知viewmodel(事件的处理程序本身就是写在viewmodel中的),这个时候viewmodel就去更改model,数据更改之后,数据的setter会触发,viewmodel会通知view进行更新

    function  Bue(options) {
        var data = options.data//真正的数据
        var _data = {}//专门搞出来的数据

        //为搞出来的数据设置getter和setter
        let that = this
        this.watcher = function (newval) {
            document.getElementById("a").innerHTML = newval
        }

        Object.defineProperty(_data,‘msg‘,{
            get:function(){//会设置数据的值,会在使用的时候触发,返回的值是多少,数据就是多少
                console.log(‘getter‘)
                return data.msg
            },
            set:function(newval){//数据被更改的时候会触发set,这个时候再通知viewmodel去控制view层改变
               that.watcher(newval)
            }
        })

        document.getElementById("a").innerHTML = _data.msg

        inp.oninput = function () {
            _data.msg = this.value//更改数据
        }

    }

vue响应式原理:

//将数据挂载在vue的实例上的时候,Vue会对这些数据进行遍历处理,创建watcher,通过监听setter和getter来通知watcher,watcher进行计算后更新view

    //数据更改,view更改,view更改,数据更改,这个mvvm里的一个特性(响应式数据绑定),体现它的效果是数据双向绑定

    //这个特性在vue是通过对数据进行Object.defineProperty处理来实现的,实现的原理vue起了个名字叫响应式原理
时间: 2024-10-17 08:59:53

Vue的相关的相关文章

(二)为webstorm添加vue的相关支持

一.添加ES6语法支持 首先打开设置: window快捷键是ctrl+alt+s或者在菜单的file中找到settings.可以通过搜索功能找到Language&Frameworks,再找到下边的JavaScript,选择ES6. 二..让WebStrom可以识别Vue文件 在设置界面中,找到File Types,接着选中上边窗口的HTML,在下边的窗口中点击绿色加号,然后输入*.vue,添加即可,如下图: 三.安装vue相关插件 在setting中找到Plugins,然后搜索vue

Vue的相关知识点

Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vue1.0悄悄的问世了,它的优雅,轻便也吸引了一部分用户,开始收到关注,16年中旬,VUE2.0问世,这个时候vue不管从性能上,还是从成本上都隐隐超过了react,火的一塌糊涂,这个时候,angular开发团队也开发了angular2.0版本,并且更名为angular,吸收了react.vue的优点,加上a

Vue 事件相关实例方法---on/emit/off/once

一.初始位置 平常项目中写逻辑,避免不了注册/触发各种事件 今天来研究下 Vue 中,我们平常用到的关于 on/emit/off/once 的实现原理 关于事件的方法,是在 Vue 项目下面文件中的 eventsMixin 注册的 src/core/instance/index.js import { initMixin } from './init' import { stateMixin } from './state' import { renderMixin } from './rend

vue指令相关的

.array p { counter-increment: longen; margin-left: 10px } .array p::before { content: counter(longen) "." } .alink { font-size: 16px; color: blue } 阅读目录 1.v-text 2.v-html 3.v-show 4.v-if 5.v-if vs v-show 6.v-else 7.v-for 8.v-on 9.v-bind 和 v-mode

Vue.js 相关知识(路由)

1. 简介 路由,工作原理与路由器相似(路由器将网线总线的IP分发到每一台设备上),Vue中的路由根据用户在网页中的点击,将其引导到对应的页面. 2. 使用步骤 安装vue-router或者直接引入vue-router.js(下载地址:https://router.vuejs.org/) 例:SPA页面(Single Page Application,将一个网站的所有页面写在一个文件,通过不同的div进行区分,再通过div的显示.隐藏实现跳转效果) 定义组件对象(页面).组件模板.注册组件 定义

vue组件相关内容

说明 组件(Component)是 Vue.js 最强大的功能之一,组件可以扩展 HTML 元素,封装可重用的代码,组件系统让我们可以用独立可复用的小组件来构建大型应用. 定义方法 这是官网给出的一种定义组件的方法 一下是我目前使用的方法,以下内容都是按照此方法定义组件的.(因为这样可以使模板和组件分开) 定义组件前首先要定义一个模板,这是定义模板的一种方式 这是定义模板的另一种方式 接下来定义组件 这里有几个注意事项: 1.定义模板时,模板里只能有一个顶层标签. 2.定义组件时,不能使用H5标

Vue组件相关

一  组建的注册 1.全局注册 1 <div id="app"> 2 <wdb></wdb> 3 </div> 4 <hr> 5 <div id="app1"> 6 <wdb></wdb> 7 <wdb></wdb> 8 </div> 9 <script> 10 Vue.component('wdb',{ 11 templa

vue的相关知识

一.DOM vs 函数库 vs框架 DOM:  API繁琐 函数库:JQuery对DOM的每个步骤的API进行一对一的简化,但并没有改变DOM做事的步骤和方法. 框架:一个包含部分已经实现的功能的半成品项目,只是暂时缺少数据和个性化页面. 优点:彻底简化了开发的步骤,且彻底避免了大量重复的劳动. 缺点:需要转变观念. 二.什么是Vue Vue是基于MVVM设计模式开发的渐进式的前端js框架 渐进式:可以有选择的,逐渐使用框架中的功能 vs  "全家桶":必须完整使用所有功能,不能掺杂其

vue路由相关知识收集

http://blog.csdn.net/sinat_17775997/article/details/76474892 http://blog.csdn.net/k491022087/article/details/70232965 http://www.cnblogs.com/congxueda/p/7080071.html http://www.cnblogs.com/congxueda/p/7071372.html