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 相关文章推荐
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
重写document.write实现无阻塞加载js广告(补充)
Dec 12 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
Jul 27 Javascript
Extjs实现下拉菜单效果
Apr 01 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
js正则取值的结果数组调试方法
Oct 10 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
vue实现鼠标移过出现下拉二级菜单功能
Dec 12 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 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
php基础知识:类与对象(5) static
2006/12/13 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
浅析Python中的for 循环
2016/06/09 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python实现某论坛自动签到功能
2019/08/20 Python
pandas分批读取大数据集教程
2020/06/06 Python
Python代码注释规范代码实例解析
2020/08/14 Python
django使用graphql的实例
2020/09/02 Python
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
自我鉴定范文200字
2013/10/02 职场文书
北大自主招生自荐信
2013/10/19 职场文书
乡下人家教学反思
2014/02/01 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
青年联谊会致辞
2015/07/31 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL