Vuejs

源码:https://github.com/zhuangZhou/vuejs

下载Vue.js

官网:http://vuejs.org

live-server使用

live-server是一个简单的服务器,具有热更新

使用npm进行全局安装

npm install -g live-server

在项目目录中启动

liver-server

内部指令

v-if & v-else & v-show

1、v-if

v-if 用来判断是否在加载HTML的DOM,比如模拟用户登录

<div v-if="isLogin">你好,XXX</div>
<div v-else>请登录</div>

在Vue里的data定义isLogin的值,当为true时,显示“你好,XXX”,当为false时,显示“请登录”。

2、v-show

v-show是通过调整css的display属性的属性值,来显示和隐藏节点,其实在HTML渲染时,已经加载了DOM;

<div v-show="isLogin">哈哈哈</div>

当isLogin为true时,显示“哈哈哈”,当为false时,隐藏。

3、两者的区别

v-if:判断是否加载,可以减轻服务器压力,当需要时在加载

v-show:调整css dispaly属性,可以使客户端操作更加流畅。

v-for

1、 v-for

v-for是用来循环data中的数组,来解析重复模板;

2、 基本用法

模板:

<ul>
<li v-for="(item,index) in list">
{{index}} - {{item}}
</li>
</ul>

js:

var vm = new Vue({
...
data(){
return{
list: [20, 23, 18, 65, 32, 19, 5, 56, 41]
}
}
});

模板中的使用形式是v-for="(item,index) in list" ,其中list是源数据数组,即js中data的list数组,item是数组元素迭代的别名(可以随便起),index是数组元素的索引,可以省略写成v-for="item in list";

3、排序

使用排序,我们需要使用computed属性,在computed里面,重新声明一个sortList对象,为什么要重新声明,是为了不污染源数据。

var vm = new Vue({
...
computed:{
sortList(){
var list = [];
for(var i =0;i<this.list.length;i++){
list.push(this.list[i]);
} return list.sort(sortNumber);
}
}
}) function sortNumber(a,b){
return a-b;
}

4、对象循环输出

在实际项目中,我们使用的最多的就是对象的循环输出,那如何输出呢?

首先,在js中定义一个对象数组:

var vm =  new Vue({
...
data(){
return{
person:[
{
name: 'xhz',
age: 22
},
{
name: 'qws',
age: 34
},
{
name: 'asd',
age: 12
},
{
name: 'xdc',
age: 23
}
]
}
}
})

然后,在模板中输出

 <ul>
<li v-for="(p,index) in person">
{{index+1}} - {{p.name}} - {{p.age}}
</li>
</ul>

对象的排序函数:

function sortByKey(arr,key){
return array.sort(function (a, b) {
var x = a[key];
var y = b[key];
return ((x<y)?-1:((x>y)?1:0));
})
}

v-text & v-html

前面我们使用插值表达式(即{{XXX}})在HTML中输出data,当网速比较慢或者加载javascript出错时,会出现一个很大的弊端,即暴露我们的{{XXX}};因此,Vue给我们提供v-text指令来解决这一问题:

<div v-text="text"></div>

当数据里需要解析HTML标签的时候,v-text是无法输出的,因此,Vue还给我们提供了一个指令:v-html

 <div v-html="html"></div>

需要注意的是:在生产环境中动态渲染HTML是非常危险的,因为容易导致XSS攻击。所以只能在可信的内容上使用v-html,永远不要在用户提交和可操作的网页上使用。

v-on

v-on是用来绑定监听事件的,可以监听DOM触发的一些javascript代码;

<button v-on:click="add">add</button>
<button @click="add">add</button>

上面的两行代码是一个意思,@click是v-on:click的简写;

当然,除了绑定click事件,其他的事件也可以绑定,比如change事件,focu事件,键盘事件,下面来说说键盘事件:

<input type="text" @key.enter="onKey">

代码的意思是,当按下"enter"键时,触发onkey事件;也可以使用键值:

<input type="text" @key.13="onKey">

v-model

v-model绑定数据源。就是把数据绑定在特定的表单元素上,可以很容易的实现双向数据绑定。

1、双向数据绑定

模板:

 <div id="app">
<p>原始文本信息:{{inputValue}}</p>
<h3>文本框</h3>
<p>v-model:<input type="text" v-model="inputValue"></p>
</div>

js:

var vm = new Vue({
...
data(){
return{
inputValue:'Hello World!'
}
}
})

2、 修饰符

  • lazy:取代 imput 监听 change 事件。

  • number:输入字符串转为数字。

  • trim:输入去掉首尾空格。

    <p>v-model.lazy:<input type="text" v-model.lazy="inputValue"></p>
    <p>v-model.number:<input type="text" v-model.number="inputValue"></p>
    <p>v-model.trim:<input type="text" v-model.trim="inputValue"></p>

3、文本区域加入数据绑定

<textarea rows="10" cols="30" v-model="inputValue"></textarea>

4、多选按钮绑定一个值

<input type="checkbox" id="checkTrue" v-model="isFlag"><label for="checkTrue">{{isFlag}}</label>

5、多选绑定一个数组

<p>
<input type="checkbox" name="zz" id="zz" value="zz" v-model="names">
<label for="zz">zz</label>
<input type="checkbox" name="yym" id="yym" value="yym" v-model="names">
<label for="yym">yym</label>
<input type="checkbox" name="zxr" id="zxr" value="zxr" v-model="names">
<label for="zxr">zxr</label>
</p>

6、单选按钮绑定数据

<p>
<input type="radio" name="1" id="man" value="男" v-model="sex">
<label for="man">男</label>
<input type="radio" name="0" id="woman" value="女" v-model="sex">
<label for="woman">女</label>
</p>

v-bind

v-bind是处理HTML中的标签属性的,例如<div></div>就是一个标签,<img>也是一个标签,我们绑定<img>上的src进行动态赋值。

模板:

<h3>绑定图片地址</h3>
<p><img v-bind:src="imgSrc" alt=""></p>
<p><img :src="imgSrc" alt=""></p>

上面两行代码是一个意思,v-bind:src是完整语法,:src是简写;

js:

var vm = new Vue({
...
data(){
return{
imgSrc:"https://www.baidu.com/img/qixi_pc_f35fe4b00cc1d200aea7cf9f86ae5dae.gif", }
}
});

当然,除了绑定图片地址,还可以绑定<a></a>标签的href属性:

<a :href="url"></a>

在工作中我们经常使用v-bind来绑定css样式:

在绑定CSS样式是,绑定的值必须在vue中的data属性中进行声明。

1、直接绑定class样式

 <p><span :class="className">1、绑定class</span></p>

2、绑定classA并进行判断,在isOK为true时显示样式,在isOk为false时不显示样式。

<p>
<span :class="{classA:isOK}">2、绑定class判断</span>
<input type="checkbox" id="isOK" v-model="isOK">
<label for="isOK">isOK:{{isOK}}</label>
</p>

3、绑定class中的数组

<p><span :class="[classA,classB]">3、绑定class数组</span></p>

4、绑定class中使用三元表达式判断

<p><span :class="isOK?classA:classB">4、绑定class三元运算符</span></p>

5、绑定style

<p><span :style="{color:red,fontSize:font}">1、绑定style</span></p>

6、用对象绑定style样式

 <p><span :style="styleObj">2、对象绑定style</span></p>
var vm = new Vue({
el: '#app',
data() {
return {
imgSrc: "https://www.baidu.com/img/qixi_pc_f35fe4b00cc1d200aea7cf9f86ae5dae.gif",
url: 'http://www.baidu.com',
className:'classA',
classA:'classA',
classB:'classB',
isOK:false,
red:'green',
font:'26px',
styleObj:{
color:'red',
fontSize:'30px'
}
}
}
})

v-pre & v-cloak & v-once

1、v-pre

在模板中跳过vue的编译,直接输出原始值。就是在标签中加入v-pre就不会输出vue中的data值了。

<div v-pre>{{msg}}</div>

这时并不会输出我们的message值,而是直接在网页中显示{{message}}

2、v-cloak

在vue渲染完指定的整个DOM后才进行显示。它必须和CSS样式一起使用,

[v-cloak] {
display: none;
}
<div v-cloak>
{{ message }}
</div>

3、v-once

在第一次DOM时进行渲染,渲染完成后视为静态内容,跳出以后的渲染过程。

<div>
<input type="text" v-model="msg">
<p v-once>{{msg}}</p>
<p>{{msg}}</p>
</div>

【复习】VueJS之内部指令的更多相关文章

  1. Vue基础(环境配置、内部指令、全局API、选项、内置组件)

    1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...

  2. Vue - 内部指令

    1.插值 A:<span>TEXT:{{text}}</span> {{text}}会被相应的数据类型text属性值替换,当text值改变时候,文本中的值也会相应的发生变化 B ...

  3. Vue 2.0入门基础知识之内部指令

    1.Vue.js介绍 当前前端三大主流框架:Angular.React.Vue.React前段时间由于许可证风波,使得Vue的热度蹭蹭地上升.另外,Vue友好的API文档更是一大特色.Vue.js是一 ...

  4. VueJs(6)---V-on指令

    V-on指令 一.概述 v-on是用来绑定事件监听器,用在普通元素上时,只能监听原生 DOM 事件.用在自定义元素组件上时,也可以监听子组件触发的自定义事件. 在监听原生 DOM 事件时,方法以事件为 ...

  5. VueJs(4)---V-model指令

    V-model指令 摘要   限制: v-model只能用在:<input>    <select>    <textarea>  <components&g ...

  6. VueJs(5)---V-bind指令

    V-bind指令 一.概述 v-bind  主要用于属性绑定,比方你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定. 示例: < ...

  7. Vuejs自定义select2指令

    在做select2插件的时候遇到一些坑,最终解决如下: Vue.directive('select2', { inserted: function (el, binding, vnode) { var ...

  8. Vue基础之内部指令(下)

    v-on绑定事件监听器 直接撸代码: <div id="app"> <h2>计数器</h2> number:{{number}} <but ...

  9. Vue基础之内部指令(上)

    v-if.v-else-if.v-else以及v-show 条件指令v-if.v-else-if.v-else 类似于JavaScript里的if.else-if.else,这三个指令根据表达式的值对 ...

随机推荐

  1. 用git上传代码到新浪云

    新浪云空间是国内免费的一个空间,不过有限制很多. 申请新浪云需要新浪账号,注册略. 使用新浪账号去http://sae.sina.com.cn申请一个空间 选择新建应用 可以选择使用php项目 管理应 ...

  2. 数据结构与算法--从平衡二叉树(AVL)到红黑树

    数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树.算法的性能取决于树的形状,而树的形状取决于插入键的顺序.在最好的情况下,n个结点的树是完全平衡的,如下图"最好情况&q ...

  3. linux下开机不自动挂载指定分区

    我的debian装好后,有保留windows,但是却不想在debian启动后桌面上,文件管理器中显示windows分区,留个记录在这里,需要的时候方便查看 使用mount 的 noauto参数: 创建 ...

  4. nexus3 添加第三方本地文件jar到仓库

    因为nexus3和nexus2手动上传第三方jar有点区别 故记录一下. 如上传京东 open-api-sdk-2.0.jar 首先创建一个目录 方便执行上传的时候url参数 也可以不创建 mkdir ...

  5. Fastify 系列教程一(路由和日志)

    介绍 Fastify是一个高度专注于以最少开销和强大的插件架构,为开发人员提供最佳体验的Web框架. 它受到了 Hapi 和 Express 的启发,是目前最快的 Node 框架之一. Fastify ...

  6. windows消息简单应用实例

    //基本定义 internal class MyMessager : IMessageFilter { public bool PreFilterMessage(ref Message m) { // ...

  7. Python Web框架篇:Django Model ORM(对象关系映射)

    一,基本操作 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 1.增(create , save): from app01 ...

  8. Visual paradigm软件介绍

    Visual paradigm软件介绍 说起Visual Paradigm你可能并不陌生,因为此前有一款功能强大的UML软件叫Visual Paradigm for UML,在这款软件在v11.1的时 ...

  9. D - Zhenya moves from the dormitory URAL - 2015

    After moving from his parents’ place Zhenya has been living in the University dormitory for a month. ...

  10. pandas数据结构练习题(部分)

    更多函数查阅http://pandas.pydata.org/pandas-docs/stable/10min.htmlimport pandas as pd#两种数据结构from pandas im ...