vue.js

1.什么是vue.js

Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

.Vue.js 是什么

   Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API

   Vue.js是一个构建数据驱动的Web界面的库。
 

   Vue.js是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。数据驱动+组件化的前端开发。

简而言之Vue.js是一个构建数据驱动 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。核心是一个响应的数据绑定系统。

 

2.vue.js的优缺点

Vue.js的特性如下:

1.轻量级的框架

2.双向数据绑定

3.指令

4.插件化

渐进式的理解:
   
不管是单页面还是多页面。首先都是通过声明式渲染声明每个字段,这是基本的要求。
基本要求不管什么页面,什么功能,都会使用声明式渲染,去渲染我们的字段,因为我们需要展现一些功能一些信息,那么就要通过渲染才可以。通常我们会把公共的头部和尾部抽出来,做成组件。这时候就需要使用组件系统。
单页面应用程序时往往是需要路由,这时候需要把vue的插件(vue-router)拉进来做路由,如果我们的项目足够复杂,大量的使用组件而且难以去管理组件的状态,这个时候我们使用vue-resource,vue-resource是集中来管理我们的状态的。项目完成后需要构建工具来build我们的系统,来提高我们的效果,最后形成完成的项目。

.Vue.js与其他框架的区别?

1.angularjs的区别

相同点:

都支持指令:内置指令和自定义指令。

都支持过滤器:内置过滤器和自定义过滤器。

都支持双向数据绑定。

都不支持低端浏览器。

不同点:

(1).AngularJS的学习成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比较简单、直观。

(2).在性能上,AngularJS依赖对数据做脏检查,所以Watcher越多越慢。

Vue.js使用基于依赖追踪的观察并且使用异步队列更新。所有的数据都是独立触发的。

对于庞大的应用来说,这个优化差异还是比较明显的。


 

2.React的区别

相同点:

react采用特殊的JSX语法,Vue.js在组件开发中也推崇编写.vue特殊文件格式,对文件内容都有一些约定,两者都需要编译后使用。

中心思想相同:一切都是组件,组件实例之间可以嵌套。

都提供合理的钩子函数,可以让开发者定制化地去处理需求。

都不内置列数AJAXRoute等功能到核心包,而是以插件的方式加载。

在组件开发中都支持mixins的特性。


 

不同点:

React依赖Virtual DOM,Vue.js使用的是DOM模板。React采用的Virtual DOM会对渲染出来的结果做脏检查。

Vue.js在模板中提供了指令,过滤器等,可以非常方便,快捷地操作DOM


 

.应用场景:

针对具有复杂交互逻辑的前端应用;

它可以提供基础的架构抽象;

可以通过AJAX数据持久化,保证前端用户体验

好处:

当前端和数据做一些操作的时候,可以通过AJAX请求对后端做数据持久化,不需要刷新整个页面,只需要改动DOM里需要改动的那部分数据。特别是移动端应用场景,刷新页面太昂贵,会重新加载很多资源,虽然有些会被缓存,但是页面的DOM,JS,CSS都会被页面重新解析一遍,因此移动端页面通常会做出SPA单页应用。

Vue.js的特点:MVVM框架、数据驱动、组件化、轻量、简洁、高效、快速、模块友好

3.常用框架模式

.MVX框架模式了解

MVX框架模式:MVC+MVP+MVVM

1.MVCModel(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职责分开。
      View通过Controller来和Model联系,ControllerViewModel的协调者,ViewModel不直接联系,基本联系都是单向的。
用户User通过控制器Controller来操作模板Model从而达到视图View的变化。


2.MVP:是从MVC模式演变而来的,都是通过Controller/Presenter负责逻辑的处理+Model提供数据+View负责显示。
      MVP中,Presenter完全把ViewModel进行了分离,主要的程序逻辑在Presenter里实现。
并且,PresenterView是没有直接关联的,是通过定义好的接口进行交互,从而使得在变更View的时候可以保持Presenter不变。


MVP模式的框架:Riot,js


3.MVVMMVVM是把MVC里的ControllerMVP里的Presenter改成了ViewModelModel+View+ViewModel
       View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上显示。
     这种自动同步是因为ViewModel中的属性实现了Observer,当属性变更时都能触发对应的操作。


MVVM模式的框架有:AngularJS+Vue.jsKnockout+Ember.js后两种知名度较低以及是早起的框架模式。


 


 

View HTML文本的js模板
ViewModel是业务逻辑层(一切js可视业务逻辑,比如表单按钮提交,自定义事件的注册和处理逻辑都在viewmodel里面负责监控俩边的数据)
Model 数据层 对数据的处理(比如增删改查)

 

4.指令

 

有时候指令太多会造成记错、记混的问题,所以本文在记忆的时候会采用穿插记忆的方式,交叉比对,不易出错。

本文主要讲了一下六个指令:

v-if//v-show//v-else//v-for//v-bind//v-on

1. v-if 条件渲染指令,根据其后表达式的bool值进行判断是否渲染该元素;

eg:  

  HTML: 

<div id="example01">

    <p v-if="male">Male</p>

    <p v-if="female">Female</p>

    <p v-if="age>25">Age:{{age}}</p>

    <p v-if="name.indexOf('lin')>0">Name:{{name}}</p>

</div>

  JS:

var vm= new Vue({

        el:"#example01",

        data:{

            male:true,

            female: false,

            age:29,

            name:'colin'

        }

    })

页面渲染效果:

所以,v-if指令只渲染他身后表达式为true的元素;在这里引入v-show指令,因为二者的区别是v-show指令会渲染他身后表达式为false的元素,这样的元素上会添加css代码:style="display:none"; 将上面v-if的实例代码改为v-show,页面渲染效果为:

 

2, v-show v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none";

3, v-else 必须跟在v-if/v-show指令之后,不然不起作用;

如果v-if/v-show指令的表达式为true,则else元素不显示;如果v-if/v-show指令的表达式为false,则else元素显示在页面上;

eg: 

<div id="app">

<h1 v-if="age >= 25">Age: {{ age }}</h1>

<h1 v-else>Name: {{ name }}</h1>

<hr>

<h1 v-show="name.indexOf('cool') = 0">Name: {{ name }}</h1>

<h1 v-else>Sex: {{ sex }}</h1>

</div>

 

 

<script>

    var vm = new Vue({

        el: '#app',

        data: {

            age: 21,

            name: 'keepcool',

            sex: 'Male'

        }

    })

</script>

 

4, v-for  类似JS的遍历,用法为 v-for="item in items", items是数组,item为数组中的数组元素。

eg:

CSS:
<style>

table,th,tr,td{

            border:1px solid #ffcccc;

            border-collapse: collapse;

        }

</style>
HTML:

<div id="example03">

    <table>

        <thead>

        <tr>

            <th>Name</th>

            <th>Age</th>

            <th>Sex</th>

        </tr>

        </thead>

        <tbody>

        <tr v-for="person in people">

            <td>{{ person.name  }}</td>

            <td>{{ person.age  }}</td>

            <td>{{ person.sex  }}</td>

        </tr>

        </tbody>

    </table>

</div>

JS:

<script>

    var vm = new Vue({

        el: '#example03',

        data: {

            people: [{

                name: 'Jack',

                age: 30,

                sex: 'Male'

            }, {

                name: 'Bill',

                age: 26,

                sex: 'Male'

            }, {

                name: 'Tracy',

                age: 22,

                sex: 'Female'

            }, {

                name: 'Chris',

                age: 36,

                sex: 'Male'

            }]

        }

    })

</script>

页面效果:

 

5, v-bind  这个指令用于响应地更新 HTML 特性,比如绑定某个class元素或元素的style样式。

eg,分页功能中当前页数高亮的效果,可以使用bind指令。

<ul class="pagination">

                <li v-for="n in pageCount">

                    <a href="javascripit:void(0)" v-bind:class="activeNumber === n + 1 ? 'active' : ''">{{ n + 1 }}</a>

                </li>

            </ul>

 

6, v-on  用于监听指定元素的DOM事件,比如点击事件。

eg:

<div id="example04">

        <input type="text" v-model="message">

        <button v-on:click="greet">Greet</button>

        <!-- v-on指令可以缩写为@符号-->

     <button @click="greet">Greet Again</button>

    </div>

<script>

    var exampleData04={

        message:"Nice meeting U"

    };

    var vm2=new Vue({

        el:"#example04",

        data:exampleData04,

        methods:{

            greet:function(){

                alert(this.message);

            }

        

        }

    })

</script>

 

5.组件

https://cn.vuejs.org/v2/guide/components.html

6.生命周期

Vue框架,熟悉它的生命周期可以让开发更好的进行。

首先先看看官网的图,详细的给出了vue的生命周期:

它可以总共分为8个阶段:

beforeCreate(创建前),

created(创建后),

beforeMount(载入前),

mounted(载入后),

beforeUpdate(更新前),

updated(更新后),

beforeDestroy(销毁前),

destroyed(销毁后)

然后用一个实例的demo 来演示一下具体的效果:

<div id=app>{{a}}</div>

<script>

var myVue = new Vue({          

el: "#app",          

data: {

a: "Vue.js"        

},         

 beforeCreate: function() { 

          console.log("创建前")            

console.log(this.a)            

console.log(this.$el)          

},         

 created: function() {

                console.log("创建之后");            

console.log(this.a)            

console.log(this.$el)          

},         

 beforeMount: function() {            

console.log("mount之前")            

console.log(this.a)            

console.log(this.$el)          

},          

mounted: function() {            

console.log("mount之后")            

console.log(this.a)            

console.log(this.$el)          

},          

beforeUpdate: function() {            

console.log("更新前");            

console.log(this.a)            

console.log(this.$el)          

},          

updated: function() {            

console.log("更新完成");            

console.log(this.a);            

console.log(this.$el)          

},          

beforeDestroy: function() {            

console.log("销毁前");            

console.log(this.a)            

console.log(this.$el)            

console.log(this.$el)          

},          

destroyed: function() {           

console.log("已销毁");          

console.log(this.a)          

console.log(this.$el)          

}   

  });  

</script>

运行后,查看控制台,

得到这个:



 

然后再methods 里面添加一个change方法:

<div id=app>{{a}}
<button v-on:click="change">change</button>
</div>

 

点击按钮之后出现的是:


 

这就是vue的生命周期,很简单吧。

7.element-ui配合使用

 

8.vue-cli脚手架

9.v-if v-show的区别?

1.手段v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;

2.编译过程v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;

3.编译条件v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

4.性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

5.使用场景:v-if适合运营条件不大可能改变;v-show适合频繁切换。

 

 

Computed methods watch 的区别

1#computed:计算属性将被混入到 Vue 实例中。所有 getter setter this 上下文自动地绑定为 Vue 实例。

2#methodsmethods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。

3#watch:是一种更通用的方式来观察和响应 Vue 实例上的数据变动。一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值