详解 vue.js用法和特性


Posted in Javascript onOctober 15, 2017

前  言

最近用Vue.js做了一个数据查询平台,还做了一个拼图游戏,突然深深的感到了vue的强大。

Vue.js是一套构建用户界面(user interface)的渐进式框架。与其他重量级框架不同的是,Vue 从根本上采用最小成本、渐进增量(incrementally adoptable)的设计。Vue 的核心库只专注于视图层,并且很容易与其他第三方库或现有项目集成。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供有力驱动。

Vue.js目前已经更新到2.x,功能和语法上有一定升级和修改,本文首先介绍基础内容。

1、新手指南

vue的使用非常简单,下载vue.js或vue.min.js直接导入即可使用。

  2、vue初步入门

2.1声明式渲染

Vue.js 的核心是,可以采用简洁的模板语法来声明式的将数据渲染为 DOM:

<div id="app">
 {{ message }}
</div>
var app = new Vue({
 el: '#app',
 data: {
 message: 'Hello Vue!'
 }
})

这样就会输入:Hello Vue!

我们已经生成了第一个 Vue 应用程序!这看起来和渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被关联在一起,所有的数据和 DOM 都是响应式的。我们如何对这一切清晰领会?只需打开你的浏览器的 JavaScript 控制台(现在,就在当前页面打开),然后设置 app.message 的值,你将看到上面的示例所渲染的 DOM 元素会相应地更新。

除了文本插值(text interpolation),我们还可以采用这样的方式绑定 DOM 元素属性:

<div id="app-2">
 <span v-bind:title="message">
 鼠标悬停此处几秒,
 可以看到此处动态绑定的 title!
 </span>
</div>
var app2 = new Vue({
 el: '#app-2',
 data: {
 message: '页面加载于 ' + new Date().toLocaleString()  }
})

鼠标悬停几秒后,就可以看到动态的提示。

这里我们遇到一些新内容。你看到的 v-bind 属性被称为指令。指令带有前缀 v-,表示是由 Vue 提供的专用属性。可能你已经猜到了,它们会在渲染的 DOM 上产生专门的响应式行为。简而言之,这里该指令的作用就是:“将此元素的title 属性与 Vue 实例的 message 属性保持关联更新”。

如果你再次打开浏览器的 JavaScript 控制台,并输入 app2.message = '一些新的 message',就会再次看到,绑定了title 属性的 HTML 已经进行了更新。

2.1条件与循环

 控制切换一个元素的显示也相当简单:

<div id="app-3">
 <p v-if="seen">现在你可以看到我</p>
</div>
var app3 = new Vue({
 el: '#app-3',
 data: {
 seen: true
 }
})

继续在控制台输入 app3.seen = false,你应该会看到 span 消失。

这个示例表明,我们不只是可以将数据绑定到文本和属性,也可以将数据绑定到 DOM 结构。而且,Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/删除元素时,自动使用过渡效果。

还有其它一些指令,每个都具有各自不同的特殊功能。例如,v-for 指令,可以使用数组中的数据来展示一个项目列表:

<div id="app-4">
 <ol>
 <li v-for="todo in todos">
  {{ todo.text }}
 </li>
 </ol>
</div>
var app4 = new Vue({
 el: '#app-4',
 data: {
 todos: [
  { text: '学习 JavaScript' },
  { text: '学习 Vue' },
  { text: '创建激动人心的代码' }
 ]
 }
})

3 、vue实例

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

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

尽管没有完全遵循 MVVM 模式,但是 Vue 的设计仍然受到了它的启发。作为约定,通常我们使用变量 vm (ViewModel 的简称) 来表示 Vue 实例。

3.1data 和 methods

在创建 Vue 实例时,会将所有在 data 对象中找到的属性,都添加到 Vue 的响应式系统中。每当这些属性的值发生变化时,视图都会“及时响应”,并更新相应的新值。

// data 对象
var data = { a: 1 }
// 此对象将会添加到 Vue 实例上
var vm = new Vue({
 data: data
})
// 这里引用了同一个对象!
vm.a === data.a // => true
// 设置实例上的属性,
// 也会影响原始数据
vm.a = 2
data.a // => 2
// ... 反之亦然
data.a = 3
vm.a // => 3

每当 data 对象发生变化,都会触发视图重新渲染。值得注意的是,如果实例已经创建,那么只有那些 data 中的原本就已经存在的属性,才是响应式的。也就是说,如果在实例创建之后,添加一个新的属性,例如:

vm.b = 'hi'

然后,修改 b 不会触发任何视图更新。如果你已经提前知道,之后将会用到一个开始是空的或不存在的属性,你就需要预先设置一些初始值。例如:

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

除了 data 属性, Vue 实例还暴露了一些有用的实例属性和方法。这些属性与方法都具有前缀 $,以便与用户定义(user-defined)的属性有所区分。例如:

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` 改变后调用
})

3.2vue实例的声明周期

vue实例的声明周期是一个很重要的概念,理解之后可以通过它实现很多功能。

看下这段代码。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
 </head>
 <body>
  <div id="container">我的声明周期,大家看吧!</div>
 </body>
 <script type="text/javascript" src="js/jquery-3.1.1.min.js" ></script>
 <script type="text/javascript" src="js/vue.js" ></script>
 <script type="text/javascript">
  //以下代码时显示vm整个生命周期的流程
  var vm = new Vue({
   el: "#container",
   data: {
    test : 'hello world'
   },
   beforeCreate: function(){
    console.log(this);
    showData('创建vue实例前',this);
   },
   created: function(){
    showData('创建vue实例后',this);
   },
   beforeMount:function(){
    showData('挂载到dom前',this);
   },
   mounted: function(){
    showData('挂载到dom后',this);
   },
   beforeUpdate:function(){
    showData('数据变化更新前',this);
   },
   updated:function(){
    showData('数据变化更新后',this);
   },
   beforeDestroy:function(){
    vm.test ="3333";
    showData('vue实例销毁前',this);
   },
   destroyed:function(){
    showData('vue实例销毁后',this);
   }
  });
  function realDom(){
   console.log('真实dom结构:' + document.getElementById('container').innerHTML);
  }
  function showData(process,obj){
   console.log(process);
   console.log('data 数据:' + obj.test)
   console.log('挂载的对象:')
   console.log(obj.$el)
   realDom();
   console.log('------------------')
   console.log('------------------')
  }
 </script>
</html>

 看一下效果图

详解 vue.js用法和特性

通过控制台的打印效果可以看出来,实例化 vue 对象大致分为 创建vue实例、挂载到dom、数据变化更新、vue实例销毁 4个阶段,,注意每个阶段都有对应的钩子,我们可以通过对这些钩子进行操作,达成一些功能。虽然初学者用不太上,但是提前了解一下还是好的,到时候碰到实际功能要能想得到生命周期的钩子。

总结

以上所述是小编个大家介绍的详解 vue.js用法和特性,希望对大家有所帮助!

Javascript 相关文章推荐
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
jQuery 动画弹出窗体支持多种展现方式
Apr 29 Javascript
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
jquery读取xml文件实现省市县三级联动的方法
May 29 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
Feb 14 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 #jQuery
JS简单实现数组去重的方法分析
Oct 14 #Javascript
jQuery响应滚动条事件功能示例
Oct 14 #jQuery
JS实现的简单表单验证功能完整实例
Oct 14 #Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 #jQuery
JavaScript实现鼠标滚轮控制页面图片切换功能示例
Oct 14 #Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 #jQuery
You might like
PHP 数据库树的遍历方法
2009/02/06 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
php-app开发接口加密详解
2018/04/18 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
Javascript缓存API
2016/06/14 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python中set常用操作汇总
2016/06/30 Python
python监控键盘输入实例代码
2018/02/09 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
python列表的逆序遍历实现
2020/04/20 Python
了解一下python内建模块collections
2020/09/07 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
linux下进程间通信的方式
2013/01/23 面试题
大学生学习党课思想汇报
2014/01/03 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
思品教学工作总结
2015/08/10 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书