vue动态绑定(基础练习必会)

Vue的基本语法

插值操作

Mustache

​ 也叫作胡子语法,{{message}},此时{{}}为胡须语法。

  1. {{message}},单值
  2. {{message + firstname}}多值操作
  3. {{message +’ s '+ firstname}}多值操作并且可以在其里面加上自定义字符串
  4. {{counter * 2}} 在里面进行加减乘除操作

v-once

​ 只会在第一次的时候进行元素赋值,无法在后面进行对元素再次赋值。

v-html

​ 展示代码为html代码

v-text

​ 过滤标签

v-pre

​ 本来,message值是1,那么{{message}}显示就是{{message}}

v-cloak

​ 斗篷,挡住字体。这个挺好用的。

​ 加上这个代码,既可以遮住原来的代码:

[v-clock]{
	display:none;
}

动态绑定v-bind

动态绑定标签属性指令。基本使用方法如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 100px;height: 100px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
        <!-- 使用v-bind指令来动态更改属性 -->
       <img style="width: 100%;height: 100%;box-shadow: 0 0 10px 1px rgba(0,0,0,0.3);" v-bind:src="image"  alt="">
        
        
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            image:'https://avatar.csdnimg.cn/3/E/9/3_charlinheng_1583548562.jpg'
        }
        
    })

</script>

运行截图:

20200619205804600

可以看到,原来的src属性是空的,加载后,通过v-bind指令将初始化得到的数据动态绑定到img控件上。但,要是有20多个控件。每个控件都写v-bind感觉会很麻烦。因此为了方便简洁,vue官方定义了简洁语法。此语法等价于v-bind。

v-bind指令的简写(简称 :语法糖),下面的写法跟我们上面的代码等价:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 100px;height: 100px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
        <!-- 使用v-bind指令来动态更改属性(采用语法糖 (:)  形式) -->
       <img style="width: 100%;height: 100%;box-shadow: 0 0 10px 1px rgba(0,0,0,0.3);" :src="image"  alt="">
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            image:'https://avatar.csdnimg.cn/3/E/9/3_charlinheng_1583548562.jpg'
        }
        
    })

</script>

运行截图
在这里插入图片描述

发现是一样的能够将image地址绑定到img中。

v-bind绑定标签的Class

通过以下代码,来学习v-bind对象的Class的增减。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
<style>
    .active{
        color:blue;
    }
</style>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
        <!-- 使用v-bind指令来动态更改属性(采用语法糖   形式) -->
       <!-- <img style="width: 100%;height: 100%;box-shadow: 0 0 10px 1px rgba(0,0,0,0.3);" :src="image"  alt=""> -->
       <!-- 示例v-bind 绑定class -->
       <a v-bind:class="{active: use}"  v-on:click="beblue">测试ssssssssssssssssss</a>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            use: false
        }
        ,methods: {
            beblue: function(){
                this.use = !this.use;
                //然后这个变亮
            }
        }

        
    })

</script>

其中,v-bind:class则是动态绑定class,在双引号里面,{} 语法表示集合,里面装的是各种元素,通过使用

active: true 或者 active: false 这样的形式来动态声明这个名为active的css类要不要使用。通过定义点击事件,点击后,将这个use的值进行反转。运行如下:

v1.gif

使用数组语法(用的比较少):

组件化思想

将单独的组件封装好,优点是可以复用。在组件化实现中,需要用到动态绑定style属性(采用对象方法)。如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
       <!-- 示例v-bind 绑定style -->
       <a :style="{fontSize:'50px'}">动态Style</a>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
        }
    })

</script>

运行结果如下:

在这里插入图片描述

设计一个按钮和输入框,输入字体大小,点击确定动态改变a标签的font,如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
<style>
    .active{
        color:blue;
    }
</style>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
       <!-- 示例v-bind 绑定style -->
       <a v-bind:style="{fontSize:fontsize}">动态Style</a>
       <input id="size" type="text" style="height:30px;" placeholder="输入字体大小" type="number">
       <button v-on:click="change" style="height:30px;">更改</button>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            fontsize: '20px'
        }
        ,methods: {
            change: function(){
                this.fontsize = document.getElementById("size").value+'px';
            }
        }
    })

</script>

运行效果如下:

在这里插入图片描述

计算属性的基本使用

让我们需要将两个后台传过来的数据,拼接在一起的时候,vue有很多方法,比如后台传过来了订单商品的原价,还有数量,那么我们前端就要算出 原价 * 数量 也就是价格,此时就要用到复合操作。下面列举几个常用的加减乘除等操作方法:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
       <!-- 示例 计算属性  -->
       <a>绑定的名字:{{add()}}</a>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            firstName: 'Chung'
            ,lastName: 'HoCheng'
        }
        ,methods: {
            add: function(){
                return this.lastName +' '+ this.firstName;
            }
        }
    })

</script>

运行如下:

在这里插入图片描述

又或者如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
       <!-- 示例 计算属性  -->
       <a>绑定的名字:{{lastName + ' ' + firstName}}</a>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            firstName: 'Chung'
            ,lastName: 'HoCheng'
        }
        ,methods: {
            add: function(){
                return this.lastName +' '+ this.firstName;
            }
        }
    })

</script>

运行结果同上,接下来介绍一种后面经常常用的方法来计算compute(计算属性):

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);justify-content: center;display:flex;margin: 0 auto;position: relative;top: 12vw;;">
       <!-- 示例 计算属性  -->
       <a>绑定的名字:{{fullName}}</a>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            firstName: 'Chung'
            ,lastName: 'HoCheng'
           
        }
        ,computed: {
            fullName:function(){
                return this.lastName + ' ' + this.firstName
            }
        }
    })
</script>

运行结果如下

在这里插入图片描述

这里是拿return 的值作为fullName的值。然后再绑定其值在标签上。

现在再来一个比较实际的案例:

现在后台传条数据,这些数据是订单商品详情,我们需要计算总价格,并且要计算其每件商品的总价格。代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue指令练习v-bind</title>
</head>
<body>
    <div id="calc" style="width: 1000px;height: 300px;border-style: solid;border-width: 2px;border-radius: 5px;border-color: rgba(0,0,0,0.3);position: relative;top: 12vw;;">
       <!-- 示例 计算属性  -->
       <a style="position: relative;">订单总价格:{{totalPrice.totalPrice}}</a>
        
       <ul>
           <li>编号: 名称: 价格:数量: 价格 :</li>
           <li v-for="(n,index) in goods">{{n.id +' ' + n.name + ' '+ n.price + ' ' + n.num + ' '+totalPrice.data[index]}}</li>
       </ul>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#calc'
        ,data: {
            goods: [
                {id: '100', name: 'Linux',price: 38.3 , num: 3}
                ,{id: '110', name: 'Unix',price: 68 , num: 10}
                ,{id: '120', name: 'Windows',price: 10.9 , num: 2}
                ,{id: '130', name: 'OS',price: 44 , num: 22}
            ]
        }
        ,computed: {
            totalPrice:function(){
                let josnData = {};
                //订单总价
                josnData.totalPrice = 0;
                //订单每件商品总价
                let eachTotalPrice = [0,0,0,0];
                for(let index = 0;index < this.goods.length;index ++){
                    eachTotalPrice[index] = this.goods[index].price * this.goods[index].num ;
                    josnData.totalPrice += eachTotalPrice[index];
                }
                josnData.data = eachTotalPrice;
                return josnData;
            }
        }
    })
</script>

运行结果如下:

20200619232436950

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值