【复习】VueJS之内部指令

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>![](imgSrc)</p>
<p>![](imgSrc)</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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,040评论 0 29
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,971评论 4 129
  • 今年的国庆,重新开始炒菜做饭,这是搬家后第一次在锅台灶边炒菜,之前就是熬煮点粥之类的,一是因为工作忙碌,二是嫌麻烦...
    方原阅读 303评论 0 0
  • 大家都知道枣类都蕴含着丰富的营养成分,而今天我们所要说的主角则是不少朋友都熟悉的优质水果——冬枣。可以说冬枣被大家...
    执笔青衫阅读 731评论 0 0
  • (连载)《美梦如璇·第二章·第十一节》 下 我不是在寻找捷径,也不是要窥探秘密,只是想,更好的定位自己,定位你在我...
    叶子程阅读 323评论 2 1