vue

<div id="app">
            <div>{{message}}</div>
            <div v-text='message'></div><!--与innerText相似-->
            <div v-html='message'></div><!--与innerHtml相似-->
            <h1 v-bind:title='message'>文本</h1><!--鼠标移上去时显示提示信息-->
            <img v-bind:src='img_url'>

v-bind可以省略不写,v-text将内容以文本的方式展现,而v-html将内容作为HTML语言代码。

var a = new Vue({
    el:'#app',
    data:{
        message:'<h1>hello world</h1>',
        img_url:'https://offlintab.firefoxchina.cn/static/img/search/baidu_web.png',

el用于定位所作用的区块。

对象语法

<div :class="{'active': isActive,'text-danger':hasError}">动态切换</div>
<!--动态地添加类,active和text-danger为类名,isActive和hasError为布尔型变量,当为False时,不添加此类名,当为True时添加类名-->
<div :class="{'active': isActive,'text-danger':!isActive}">动态切换</div>
<div :class='classObj'></div>
<!--classObj为两个类名的组合-->
isActive:true,
hasError:true,
classObj:{
    'textColor':true,
    'textSize':false
    },

数组语法

<div :class="[style1,style2]">数组语法</div>
<div :class="[hasA ? styleA:styleB,style1]"></div>
<!--数组元素可以是三目表达式-->
style1:'active1',
style2:'text-red',
hasA:false,
styleA:'right',
styleB:'left',

Vue属性绑定

支持对象绑定和数组绑定。
其中,数组元素可以是三目表达式。
对象绑定时,对象属性的名称代表样式的名称,属性的值,表明了该样式是否应用。
数组绑定时,数组的值是一个变量名,变量的值就代表了样式。

<p :style="{color:rcolor,fontSize:fsize+'px'}">驼峰命名</p>
<p :style="[styleObject,A]">数组绑定</p>
styleObject:{
        color:'red',
        fontSize:'19px'
},
A:{
    display:'block',
},
rcolor:'red',
fsize:24,

事件

<!-- <div v-on:click='changeBg' id='div1' :style="{background:bgColor}"></div> -->
<div @click="changeBg('red')" id='div1' :style="{background:bgColor}"></div>
<!--
    v-bind => :
    v-on   => @-->
methods:{
        changeBg(color){
            this.bgColor=color;
        },

事件修饰符

<!-- <button @click="counter += 1">{{counter}}</button> -->
<button @click.once="counter += 1">{{counter}}</button>
<!-- once表示此事件只执行一次 -->
            
<div @click="outter" style="width: 300px;height: 300px;background: gray;">
    <div @click.stop="inner" style="width: 100px;height: 100px;background: green;"></div>
    <!-- stop可以阻止事件冒泡 -->
</div>
<a @click.prevent="no" href="https://www.baidu.com/">跳转</a>
            
<!-- mouseup鼠标松开时触发,right代表鼠标右键 -->
<button @mouseup.right='no'>点击</button>
<!-- enter代表enter键 -->
<!-- <button @keyup.enter="keyup">按键</button> -->
<!-- keyup键盘松开时触发 $event表示触发事件-->
<button @keyup="keyup($event)">按键</button>
outter(){
        alert("outter");
},
inner(){
    alert("inner");
},
no(){
    alert('跳不了');
},
keyup(e){
    //alert('enter');
    console.info(e.key);
},

条件渲染

v-if与v-show

            <div v-if='hasLogin'>
                您没有登录,请登录。
                
            </div>
            <div v-if='score > 90'>优秀</div>
            <div v-else-if='score > 70'>良好</div>
            <div v-else-if='score >= 60'>良好</div>
            <div v-else>不及格</div>
            <!-- v-show只改变元素的显示方式(display:none)比v-if要快 -->
            <div v-show="loginType == 'phone'">
                <label for="phone">手机号码</label>
                <!-- key的作用是当切换时,清除输入框的内容 -->
                <input key="user-login" type="text" id="phone" placeholder="请输入电话号码" name="">
            </div>
            <div v-show="loginType == 'email'">
                <label for="email">邮箱</label>
                <input key="email-login" type="email" id="email" placeholder="请输入邮箱" name="">
            </div>
            <button @click="change">切换登陆方式</button>
hasLogin:true,
score:80,
loginType:'email',

change(){
            if(this.loginType=="email"){
                this.loginType = "phone"
            }else{
                this.loginType = "email"
            }
        },

v-for

            <table>
                <!-- student表示列表中的每一行,key表示student的下标 -->
                <tr v-for="student,key in students">
                    <td>{{student.name}}-{{key}}</td>
                    <td>{{student.gender}}</td>
                    <td>{{student.age}}</td>
                </tr>
            </table>
            <!-- index表示属性的名称,value表示属性的值 -->
            <ul>
                <li v-for="value,index in student">{{index}}-{{value}}</li>
            </ul>
students:[
            {name:"张三",gender:"男",age:20},
            {name:"张三1",gender:"男",age:20},
            {name:"张三2",gender:"男",age:20},
            {name:"张三3",gender:"男",age:20},
            {name:"张三4",gender:"男",age:20},
            {name:"张三5",gender:"男",age:20},
        ],
        student:{name:'张三',gender:"男",age:20},

计算属性

<p>Original message:"{{message}}"</p>
<!-- 计算属性将计算结果缓存起来,只要数据没有改变,就会一直使用计算后的结果 -->
<p>Computed reversed message:"{{reversedMessage}}"</p>
<!-- 函数一句代码执行一遍 -->
<p>method reversed message:"{{reversedMessage1()}}"</p>
<button @click="changeMsg">改变message</button>
computed:{
        reversedMessage:function(){
            return this.message.split('').reverse().join('');
        }
    },
reversedMessage1(){
            return this.message.split('').reverse().join('');
        },

数据监听

<!-- 数据监听 -->
            <button @click="changeA">改变a</button>
            <button @click="changeStu">改变student</button>
student:{name:'张三',gender:"男",age:20},
a:1,
//监听器
watch:{
        a:function(val,oldval){
            console.info("新的值是"+val)
            console.info("旧的值是"+oldval)
        },
        student:{
            handler:function(val,oldval){
                console.info(oldval);
                console.info(val);
                console.info("student 改变了" +oldval.name + val.name);
            },
            deep:true//深度监听,可以监听到对象内部的变化
        }
    },
changeA(){
            var newA = parseInt(Math.random()*10);
            this.a = newA;
        },
changeStu(){
            var num = parseInt(Math.random()*10);
            this.student.name = '李四' + num;
            this.student.age += 1;
        },

表单绑定

v-model绑定输入的数据

            <input type="text" v-model.lazy="Username" name="username"><!--lazy当按下回车后起作用-->
            <input type="text" v-model.trim="Username" name="username"><!--trim去掉两端的空格-->
            <p style="display: inline-block;">{{Username}}</p>
            <input type="radio" name="gender" v-model="gender" value="男">男
            <input type="radio" name="gender" v-model="gender" value="女">女
            <span>你选择的性别是: {{gender}}</span>
Username:"",
gender:'未知',

过滤器

将传过来的value进行加工处理

            <!-- 全局注册 在id不同的div中也可以用-->
            <p>{{message | toAdd}}</p>
            <!-- 局部注册 -->
            <p>{{message | reversed}}</p>
            <p>{{message | param("A","B","C")}}</p>
            <!-- <input type="text" v-model='msg | filterHtml' name="">
<div id='demo'>{{message | toAdd}}</div>

全局注册

Vue.filter("toAdd",function(value){
    return value + "-!!!"
});
new Vue({
    el:"#demo",
    data:{
        message:'<h1>hello world</h1>'
    }
})

局部注册(本地过滤器)

new Vue({
......
    filters:{
            reversed:function(value){
                return value.split('').reverse().join('');
            },
            param:function(value,a,b,c){
                return value +"-"+a+"-"+b+"-"+c;
            },
        },
......

指令

            <!-- 全局指令 v后跟的参数与directive的参数相同 -->
            <p v-blue>aaaaaa</p>
            <p v-red>aaaaaa</p>
            <!-- 局部指令 v后跟的参数为函数名 -->
            <p v-color>aaaaaa</p>

全局指令

Vue.directive('blue',function(el){
    el.style.color='blue';//el指代元素本身
})

局部指令

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

推荐阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,185评论 0 25
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,198评论 0 6
  • 一、了解Vue.js 1.1.1 Vue.js是什么? 简单小巧、渐进式、功能强大的技术栈 1.1.2 为什么学习...
    蔡华鹏阅读 3,311评论 0 3
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,889评论 1 4
  • 谁说少年不识愁滋味?平时乐呵呵的小学生们,虽然大部分时候的悲伤都是强烈而短暂的,上一分钟哭,下一分钟就可以笑...
    海棠无香love阅读 329评论 0 1