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

  使用基础可参看http://www.cnblogs.com/xulei1992/p/6015416.html

  补充:

  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不能检测到下面数组的变化:

  1. 直接用索引设置元素,如vm.items[0]={}。
  2. 修改数据的长度,如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 基础介绍的更多相关文章

  1. vue基础介绍及使用

    1.vue基本使用 vm:el / data v:v-model / {{ }} 1. 引入Vue.js 2. 创建Vue对象 el : 指定根element(选择器) data : 初始化数据(页面 ...

  2. vue基础---介绍

    (1)声明式渲染 Vue.js 的核心是采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统: ①文本 <div id="app"> {{ message }} & ...

  3. Vue.js介绍

    http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思 ...

  4. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  5. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十九║Vue基础: 样式动态绑定+生命周期

    回顾 哈喽大家好,前后端分离系列文章又开始了,今天周一,还是感谢大家花时间来观看我写的博客,周末呢,没有写文章,但是也没有闲着,主要是研究了下遗留问题,看过之前文章的应该知道,之前的在AOP使用Red ...

  6. Vue基础以及指令

    Vue 基础篇一   一.Vue框架介绍 之前大家学过HTML,CSS,JS,JQuery,Bootstrap,现在我们要学一个新的框架Vue~ Vue是一个构建数据驱动的web界面的渐进式框架. 目 ...

  7. 2-5 vue基础语法

    一.vue基础语法 语法: {{msg}} html赋值: v-html="" 绑定属性: v-bind:id="" 使用表达式: {{ok? "ye ...

  8. Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法

    一.ES6快速入门 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 2 ...

  9. Vue(1)- es6的语法、vue的基本语法、vue应用示例,vue基础语法

    一.es6的语法 1.let与var的区别 ES6 新增了let命令,用来声明变量.它的用法类似于var(ES5),但是所声明的变量,只在let命令所在的代码块内有效.如下代码: { let a = ...

随机推荐

  1. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  2. SSH登录卡顿解决方案

    在使用ssh远程登录Linux主机时,经常出现需要等待一段时间才能登录,甚至登录超时的情况 原因一:SSH服务器默认开启了DNS的查询功能:UseDNS=yes 当UseDNS选项处于开启状态时,客户 ...

  3. 如何打开Mac OSX 终端的颜色

    如何打开Mac OSX 终端的颜色 听语音 | 浏览:8453 | 更新:2015-12-15 16:48 1 2 3 4 5 6 7 分步阅读 Mac 终端默认颜色很单一,文件夹和文件无法区分,可以 ...

  4. sp_dboption

    http://www.yesky.com/imagesnew/software/tsql/ts_sp_da-di_8c32.htm A. ½«Êý¾Ý¿âÉèÖÃΪֻ¶Á ÏÂÃæµÄʾÀý½« ...

  5. codeforces865C

    Gotta Go Fast CodeForces - 865C You're trying to set the record on your favorite video game. The gam ...

  6. python sqlite3学习笔记

    1.sqlite3.connect()参数说明 self.connect = sqlite3.connect(db_name,timeout=3,isolation_level=None,check_ ...

  7. chromedriver安装

    chromedriver.exe下载 淘宝的镜像地址可以下载 https://npm.taobao.org/mirrors/chromedriver/ 找到自己chrome浏览器适合的chromeDr ...

  8. Java图片裁剪

    public static void main(String[] args) throws IOException { String path = "C:/Users/yang/Deskto ...

  9. HearthBuddy炉石兄弟 如何调试ai

    Sepefeets's update to botmaker's Silverfish AI This AI is a Custom Class for Hearthranger and Hearth ...

  10. Python3+RobotFramewok RIDE环境搭建(一)

    工欲善其事,必先利其器,RIDE目前可以比较稳定的支持python3了,这里简单介绍一下环境的部署,建议多看看读一读官方文档,对能力提升很有帮助,很简单的三步: (1)安装python3,不详细介绍了 ...