vue.js初学入门教程(1)
作者:Redchar 发布时间:2023-07-02 17:06:21
Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。
0.MVVM
什么是MVVM?就是Model-View-ViewModel。
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的过程就是定义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://www.jb51.net/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>
当我搜破车的时候:
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>
其他:
v-bind指令可以缩写为一个冒号,v-on指令可以缩写为@符号。
v-model指令后面可以添加number、lazy、debounce参数。
Number可以将用户的输入转换为Number类型(如果原值的转换结果为NaN,则返回原值)。
在input中时添加lazy将数据改到在change事件中发生。
Debounce可设置延时。
本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。


猜你喜欢
- 一丶为什么需要事务隔离级别mysql是一个客户端/服务端软件,对于同一个服务器来说,可以有多个客户端进行连接,每一个客户端进行连接之后就形成
- I. Strict Mode阐述根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制:
- Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新
- 找到nginx多网站配置文件:类似 nginx/sites-available/www.baidu.comserver { li
- class MyClass(): # 直接将属性定义在类中,这种属性称为 类属性 # 类属性可以通过实列对象和类对象
- virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。
- 引言如果你不确定TypeScript是什么,它基本上是一种建立在JavaScript之上的类型化语言。所有的JavaScript都是有效的T
- 聚类今天说K-means聚类算法,但是必须要先理解聚类和分类的区别,很多业务人员在日常分析时候不是很严谨,混为一谈,其实二者有本质的区别。分
- 前言本文主要给大家介绍了关于Django实现内容缓存的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。1.缓存的简
- 如下所示:只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps
- mysql复制表中的一列到另一个表中有时候,我们需要复制某个字段一整列的数据到另外一个新的字段中,这很简单,SQL可以这么写:UPDATE
- css里关于浏览器的兼容问题一直困惑着我们初级的css用户(高手可直接绕过),这里想根据我前段时间拜读的李超的书籍《css网站布局实录》里学
- 比如 1--1 2--1  
- replace()方法返回当前old换成new,可选择的替代限制到最大数量的字符串的副本。语法以下是replace()方法的语法
- 本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法。分享给大家供大家参考,具体如下:私有变量,私有方法:python的
- Mysql的增删改查语句简单实现增加记录:insert into tablename(...) values(...)//如果增加的记录包括
- 一、背景起源于一个问题:怎样找到字符串中出现次数最多的字符其实使用max函数就能很轻松的解决这个问题:代码:str1 = "AAA
- 其实很简单,用len函数:>>> array = [0,1,2,3,4,5] >>> print len
- 总结类的定义很久以前,语言都是面向过程的,经过计算机科学家的探索,出现了面向对象。面向对象可以解释生活中很多东西。比如人,人就是个对象,有参
- 在你自己安装了一个新的MySQL服务器后,你需要为MySQL的root用户指定一个目录(缺省无口令),否则如果你忘记这点,你将你的MySQL