Vue2 插值语法 v-属性键盘事件

mustang

    <style>
        [v-cloak]{
            display: none;
        }
        .box{
            width: 200px;
            height: 200px;
            border: 1px solid #000;
        }
        .boxBg{
            background-color: aqua;
        }
    </style>
   
    <div class="app">
        <h1>{{context}}</h1>							<!-- 不解析html标签,网速慢时会显示未解析的差值语法 -->
        <!-- 只渲染一次,修改data后不会改变 -->
        <h1 v-once>{{context}}</h1>
        <h1 v-html="context1"></h1>
        <h1 v-text="context1"></h1>
        <!-- vue实例未创建时该标签存在v-cloak属性,实例创建后清除v-cloak属性,用于解决屏幕闪动 -->
        <h1 v-cloak>{{context}}</h1>
        <pre>
            该标签属于h5相关内容
            保留标签内文本布局输出
        </pre>
        <!-- 无法被vue解析 -->
        <h1 v-pre>{{context}}</h1>
		
		<!-- 数据单向绑定,数据只能通过data修改,input无法修改data属性 -->
		<input type="text" v-bind:value="context">
		<input type="text" :value="context">					<!-- 简写(语法糖形式) -->
		<a v-bind:href="url">百度一下</a>						<!-- 动态绑定属性 -->
		<div :class="{box:isbox}"></div>											<!-- 动态绑定类名,对象形式 -->
		<div :class="['box','boxBg']"></div>											<!-- 动态绑定类名,数组形式 (数组元素为字符串,并且要与类名、data内的元素一一对应)-->

		<ul>
            <li v-for="(item,index) in arr" :key="index" :class="{boxBg}">
                {{index}}:{{item}}
            </li>

			<li v-for="(item,index) in arr2" :key="index" :class="{boxBg:arrIndex==index}" v-on:click="btn(item,index)">
                {{index}}:{{item}}
            </li>
        </ul>
		
		<a :style="{color,fontSize:fs}" href="#">百度一下</a>						<!-- 动态绑定样式 -->
		<a :style="[style1,style2]" href="#">百度一下</a>
    </div>

    <script>
        const vm = new Vue({
            el:'.app',
            data:{
                context: '我是一段文本',
                context1:'<a href="">我是a标签</a>',,
                url:'https://www.baidu.com'
                isbox:true,
                box:true,
                hasBg:true,
                arr:['华为','OPPO','小米'],
                arrIndex:-1
				
				color:red,
				fs:"12px"
				style1:{color:"aqua"},
				style2:{fontSize:"12px"}
            },
            methods: {
                btn(item,index){
                    console.log(index);
                    console.log(item);

                    this.arrIndex=index
                }
            }
        })
    </script>

v-if

    <div class="app">
        <h1 v-if="score<50">不及格</h1>
        <h1 v-else-if="score>50&&score<80">及格</h1>
        <h1 v-else-if="score>80&&score<90">中等</h1>
        <h1 v-else-if="score>90&&score<99">优秀</h1>
        <h1 v-else>100昏</h1>
    </div>

    <script>
        const vm = new Vue({
            el:'.app',
            data:{
                score: 80
            }
        })
    </script>

v-show 以及它与v-if区别

<div class="app">
        <!-- v-show 对应值为fasle,h1加行内样式display:none -->
        <h1 v-show="flag">我是h1</h1>
        <!-- v-if 对应值为fasle,h1从dom树中删除 -->
        <h1 v-if="flag">我是h1</h1>
        <button @click="changeType">改变状态</button>
    </div>

    <script>
        const vm = new Vue({
            el:'.app',
            data:{
                flag: true
            },
            methods: {
                changeType(){
                    this.flag=!this.flag
                }
            },
        })
    </script>

修饰符

<!-- 挂载点(vue容器) -->
    <div class="app">
        <div @click="btnF">
            <!-- 解决冒泡方法二:在子级用vue的.stop属性 -->
            <button @click.stop="btnC($event)">点我冒泡</button>
            <!-- 解决默认行为方法二 -->
            <a href="http://www.baidu.com" @click.prevent="link">百度</a>
            <!-- 键盘事件方法一 -->
            <input type="text" @keyup="inputKey1">
            <!-- 键盘事件方法二 -->
            <input type="text" @keyup.Enter="inputKey2">
            <!-- 键盘事件方法二(别名) -->
            <input type="text" @keyup.Up="inputKey3">
            <input type="text" @keydown.tab="inputKey4">
            <!-- .once只触发一次 -->
            <button @click.once="btnC($event)">点我冒泡</button>
        </div>
    </div>

    <script>
        // 创建vue实例
        const vm = new Vue({            //vm Vue{}
            el:'.app',
           methods:{
                btnF(){
                    console.log('触发了父级点击事件');
                },
                btnC(e){
                    console.log('触发了子级点击事件');
                    // 解决冒泡方法一:在子级用es6的e.stopPropagation();方法
                    // e.stopPropagation();
                },
                link(e){
                    // 解决默认事件方法一
                    e.preventDefault();
                },
                inputKey1(e){
                    if(e.key=='Enter'){
                        console.log('回车1');
                    }
                },
                inputKey2(e){
                    console.log('回车2');
                },
                inputKey3(e){
                    console.log('上');
                },
                inputKey4(e){
                    console.log('tab');
                }
            },
            
        })
    </script>

v-for 为什么要加:key

没有绑定key,默认绑定index,即dom元素的索引
如果在dom元素前添加一个元素,第二个元素(添加前的第一个元素)所保存的值,会先提出,当元素添加后,再次根据索引(添加的新元素)将值赋给新元素

如果绑定了data数组对象中某一元素的唯一标识,添加元素前,会将元素保存的值与该标识进行绑定,元素添加后,寻找data数组对象中唯一标识所绑定的值,将其渲染到浏览器上,没有绑定的标识,他的值赋为空,

由于值与唯一标识的绑定,vue便忽略了该dom元素,将更多的资源用于新元素添加的操作上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值