vue.js初学入门教程(1)


Posted in Javascript onNovember 03, 2016

Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。

0.MVVM

什么是MVVM?就是Model-View-ViewModel。

vue.js初学入门教程(1)

ViewModel是Vue.js的核心,它是一个Vue实例。

不太懂也没关系,慢慢就懂了。

1.基础示例

代码:

<!DOCTYPE html>

<html>

<head>

 <meta charset="utf-8">

 <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

 <title></title>

</head>

<body>

<div id="didi-navigator">

 <ul>

 <li v-for="tab in tabs">

 {{ tab.text }}

 </li>

 </ul>

 </div>

 <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

 <script type="text/javascript">

 new Vue({

 el: '#didi-navigator',

 data: {

 tabs: [

 { text: '巴士' },

 { text: '快车' },

 { text: '专车' },

 { text: '顺风车' },

 { text: '出租车' },

 { text: '代驾' }

 ]

 }

 })

 

 </script>

</body>

</html>

vue.js初学入门教程(1)

使用Vue的过程就是定义MVVM各个组成部分的过程的过程。

· 定义View

· 定义Model

· 创建一个Vue实例或"ViewModel",它用于连接View和Model 

2.数据绑定

2.1 插值

有时候只需渲染一次数据,后续数据变化不再关心,可以通过“*”实现:

<span>Text: {{*text}}</span>

双大括号标签会把里面的值全部当作字符串来处理,如果值是HTML片段,则可以使用三个大括号来绑定:

<div>Logo: {{{logo}}}</div>

Logo: ‘<span>DDFE</span>'

2.2 表达式

Mustache标签也接受表达式形式的值。

3.指令(上)

v-if指令
v-show指令
v-else指令
v-for指令
v-bind指令
v-on指令
v-model指令

v-if:是否渲染。

v-show:肯定渲染,是否显示。

其中,v-show不支持<template语法>。一般来说,v-if有更高的切换消耗,而v-show有更高的初始渲染消耗。因此,如果需要频繁地切换,则使用v-show较好;如果在运行时条件不大可能改变,则使用v-if较好。另外,将v-show用在组件上时,因为指令的优先级v-else会出现问题,可以用另一个v-show替换v-else。

3.1 关于v-for

使用基础可参看https://3water.com/article/96364.htm。

补充:

Vue.js增加了两个方法观测变化:$set、$remove。

3.1.1 应该尽量避免直接设置数据绑定的数组元素

因为这些变化不会被Vue.js检测到,因而也不会更新视图渲染。这时,我们可以使用$set方法:

        demo.item.$set(0,{childMsg:'Changed!'})

$remove是splice的语法糖,用于从目标数组中查找并删除元素。

       demo.item.$remove(item)

3.1.2 有时可能需要用全新对象来替换数组

Vue.js应尽可能地复用已有实例。如果没有唯一的键供追踪,则可以使用track-by=”$index”,它强制让v-for进入原位更新模式:片段不会被移动,而是简单地以对应索引的新值刷新。这时DOM节点不再映射数组元素顺序的改变,不能同步临时状态(比如<input>元素的值),以及组件的私有状态。

因为js的限制,Vue.js不能检测到下面数组的变化:

             直接用索引设置元素,如vm.items[0]={}。
            
修改数据的长度,如vm.items.length = 0。

前一个问题可用$set解决,后一个问题只需用一个空数组替换items即可。

3.1.3 v-for可以和vue.js提供的内置过滤器(filterBy)或排序(orderBy)数据一起使用

filterBy的例子: 

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
 </head>
 <body>
 <input v-model="searchText" />
 <ul>
 <li v-for="user in users | filterBy searchText in 'name'">{{user.name}}</li>
 </ul>
 <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
 <script type="text/javascript">
 var haha = new Vue({
 el:'body',
 data:{
 users:[
 {
 name:'快车',
 tag:'1'
 },
 {
 name:'慢车',
 tag:'2'
 },
 {
 name:'好车',
 tag:'3'
 },
 {
 name:'破车',
 tag:'4'
 }
 ]
 }
 })
 </script>
 </body>
</html>

vue.js初学入门教程(1)

当我搜破车的时候:

vue.js初学入门教程(1)

orderBy的例子:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
 </head>
 <body>
 <ul>
 <li v-for="user in users | orderBy field reverse">{{user.name}}</li>
 </ul>
 <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
 <script type="text/javascript">
 var demo = new Vue({
 el:'body',
 data:{
 field:'tag',
 reverse:false, // 颠倒
 users:[
 {
 name:'快车',
 tag:'2'
 },
 {
 name:'慢车',
 tag:'3'
 },
 {
 name:'好车',
 tag:'1'
 },
 {
 name:'破车',
 tag:'0'
 }
 ]
 }
 })
 </script>
 </body>
</html>

vue.js初学入门教程(1)

其他:

v-bind指令可以缩写为一个冒号,v-on指令可以缩写为@符号。

v-model指令后面可以添加number、lazy、debounce参数。

Number可以将用户的输入转换为Number类型(如果原值的转换结果为NaN,则返回原值)。
在input中时添加lazy将数据改到在change事件中发生。
Debounce可设置延时。 

参考:大神写的:https://3water.com/article/96426.htm《vue.js权威指南》

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
基于json的jquery地区联动效果代码
Jul 06 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
JavaScript拆分字符串时产生空字符的解决方案
Sep 26 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
jQuery 实现批量提交表格多行数据的方法
Aug 09 jQuery
vue和better-scroll实现列表左右联动效果详解
Apr 29 Javascript
node crawler如何添加promise支持
Feb 01 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 #Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
Nov 03 #Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 #Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
Nov 02 #Javascript
微信小程序  audio音频播放详解及实例
Nov 02 #Javascript
微信小程序 vidao实现视频播放和弹幕的功能
Nov 02 #Javascript
bootstrap基础知识学习笔记
Nov 02 #Javascript
You might like
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
Angular路由简单学习
2016/12/26 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
python 生成图形验证码的方法示例
2018/11/11 Python
详解python中的数据类型和控制流
2019/08/08 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
详解Python 函数参数的拆解
2020/09/02 Python
python 如何对logging日志封装
2020/12/02 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
产品质量承诺书范文
2014/03/27 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
公司开业主持词
2015/07/02 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python