浅谈Vue.js


Posted in Javascript onMarch 02, 2017

vue.js的总体评价“简单却不失优雅,小巧而不乏大匠”

Vue.js简介

Vue.js的作者为Evan You(尤雨溪),任职于Google Creative Lab,虽然Vue是一个个人项目,但在发展前景上个人认为绝不输于Google的AngularJs,下面我会将Vue与Angular(Angular 1.0+版本)做一些简单的比较。

Vue的主要特点就和它官网(http://cn.vuejs.org/)所介绍的那样:

(1) 简洁 (2) 轻量 (3)快速 (4) 数据驱动 (5) 模块友好 (6) 组件化

下面看一段Angular的实现双向绑定的代码

// html
<body ng-app="myApp">
    <div ng-controller="myCtrl">
    <p>{{ note }}</p>
    <input type="text" ng-model="note">
  </div>
</body>

// js
var myModule = angular.module('myApp', []);
myModule.controller('myCtrl', ['$scopp', function($scope) {
  $scope.note = '';
]);

然后再看一下Vue的代码

// html
<body>
  <div id="app">
    <p>{{ note }}</p>
    <input type="text" v-model="note">
  </div>
</body>

// js
var vm = new Vue({
  el: '#app',
  data: {
    note: ''
  }
})

相比较而言我个人认为Vue的代码编写风格更加简洁,并且通俗易懂。

不失优雅

Vue虽然是一个比较轻量级的框架,简单轻量的同时还非常的人性化,其提供的API也是非常的容易理解,同时也提供了一些很便捷的指令和属性。

例如:

(1) 绑定click事件

<a v-on:click="doSomething"></a>

可以简写为:

<a @click="doSomething"></a>

(2) 绑定动态属性

<a v-bind:href="url" rel="external nofollow" rel="external nofollow" ></a>

可以简写为:

<a :href="url" rel="external nofollow" rel="external nofollow" ></a>

(3) 便捷的修饰符

<!-- 阻止单击事件冒泡 -->
<a @click.stop="doSomething"></a>

<!-- 只在按下回车键的时候触发事件 -->
<input @keyup.enter="submit">

(4) 实用的参数特性

<!-- debounce 设置一个最小的延时 -->
<input v-model="note" debounce="500">

<!-- 在 "change" 而不是 "input" 事件中更新数据 -->
<input v-model="msg" lazy>

怎么样,是不是感觉优雅极了。

小巧

说起小巧,那应该首先要关注下Vue的源码大小,Vue的生产版本(即min版)源码仅为72.9kb,官网称gzip压缩后只有25.11kb,相比Angular的144kb缩小了一半。

小巧的一种好处就是可以让用户更自由的选择相应的解决方案,在配合其他库方面它给了用户更大的空间。

如Vue的核心默认是不包含路由和 Ajax 功能,但是如果项目中需要路由和AJAX,可以直接使用Vue提供的官方库Vue-router及第三方插件vue-resource,同时你也可以使用其他你想要使用的库或插件,如jQuery的AJAX等。

是不是感觉非常的灵活。

不乏大匠

Vue虽然小巧,但是“麻雀虽小五脏俱全”,在构建大型应用的时候也是得心应手。

(1) 模块化

结合一些第三方模块构建工具,如CommonJS、RequireJS或者SeaJs,可以轻松实现代码的模块化。

但是在这里小编不推荐使用上述构建工具,直接使用ES6的模块化功能,再结合Webpack进行相应打包是目前最热门的方案。

在今后的文章中,我也会对其进行介绍,包括Webpack的配置。

(2) 组件化

Vue的组件化功能可谓是它的一大亮点,通过将页面上某一组件的html、CSS、js代码放入一个.vue的文件中进行管理可以大大提高代码的维护性。

例如:

// App.vue
<template>
  <div class="box" v-text="note"></div>
</template>
<script>
export default {
  data () {
    return {
      note: '这是一个组件的html模板!'
    }
  }
}
</script>
<style scoped>
.box {
  color: #000;
  }
</style>

我们还可以在组件里写一些预处理语言:

// App.vue
<template lang='jade'>
  div(class="box" v-text="text")
</template>
<script>
export default {
  data () {
    return {
      note: '这是一个组件的html模板!'
    }
  }
}
</script>
<style lang="stylus">
.box color: #000
</style>

当然这样写我们是需要通过webpack来进行打包的,推荐使用Webpack + vue-loader的方式,同时使用ES6语法,需要安装babel来进行转换。因为文章为浅谈Vue.js,所以这里不做深入介绍。

(3) 路由

和Angular一样,Vue也具有它的路由功能。通过路由功能,我们可以实现各个组件的按需加载,轻松构建单页应用。下面是一个简单的路由配置文件:

// router.js
'use strict'
export default function(router) {
  router.map({
     '/': {
       component: function (resolve) {
         require(['./components/Foo.vue'], resolve)
       }
     },
     '/foo': {
       component: function (resolve) {
         require(['./components/Foo.vue'], resolve)
       }
     },
     '/bar': {
       component: function (resolve) {
         require(['./components/Bar.vue'], resolve)
       }
     }
  })
}

如需查看具体的路由配置及使用,移步官方提供的文档:http://vuejs.github.io/vue-router/zh-cn/index.html

总结

个人认为前端的一些技术都是融会贯通的,学习一门语言或者框架本身并不是为了学习它的技术,最重要的是学习它的思维,只有思维层面得到了延伸,学习其他技术的时候会发现得心应手。Vue带给我们的是前端一种解决问题的新的思维。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Javascript学习笔记之函数篇(五) : 构造函数
Nov 23 Javascript
AngularJS身份验证的方法
Feb 17 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
Jan 05 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
JS触摸与手势事件详解
May 09 Javascript
前端构建工具之gulp的配置与搭建详解
Jun 12 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
Apr 15 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 #Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 #Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 #Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 #Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 #Javascript
jquery仿京东侧边栏导航效果
Mar 02 #Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
Mar 02 #Javascript
You might like
php中http_build_query 的一个问题
2012/03/25 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python网络爬虫学习笔记(1)
2018/04/09 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
python 装饰器的基本使用
2021/01/13 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
小学趣味运动会加油稿
2014/09/25 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫