Vue基础学习二

什么是双向绑定?

看了视频资料,我对此的总结就是改变视图的值,vm的值也随之改变;改变vm的值,视图的值也能随之改变,这就是双向绑定。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <input type="text" :value="msg">
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World"
        }
    })
</script>

运行后我们改变v-bind中的值即文本框中的值,发现插值表达式中的值没有发生改变,在浏览器中的控制台输入vm点击回车键后查看vm中的msg的值也没有改变,所以说v-bind没法实现通过改变视图的值直接改变vm中数据的值。
在这里插入图片描述
那通过改变vm的值能否改变视图中插值表达式和v-bind中的值吗?答案是能。
如图,改变vm中msg中的值后视图中的插值表达式和v-bind的值同时发生了改变,所以说v-bind只能是单向绑定。
在这里插入图片描述
通过上面的实验,我们可以得知,v-bind是不能实现双向绑定的,看了这么多的废话,小编都觉得自己有些啰嗦了,来吧,各位饥渴的伙伴,我告诉你们

能实现双向绑定,那就是v-model

我们把v-bind换成v-model

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <input type="text" v-model="msg">
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World"
        }
    })
</script>

再次运行后就会发现,改变v-model中的值后,插值表达式和vm中的值都会发生改变,改变vm中的值后,插值表达式和v-model中的值也会随之改变,这样就实现了双向绑定。
在这里插入图片描述
demo1

v-model只适用于含有value值的标签中使用,并只代表value值,v-bind可以适用标签中的任何属性。
通过下面的例子可以很好的理解这句话。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="score">
        <br/>
        <input type="range" v-model="score" min="0" :max="maxValue">
        <br/>
        <select v-model="maxValue">
            <option value="100">100</option>
            <option value="1000">1000</option>
            <option value="10000">10000</option>
        </select>
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            score:50,
            maxValue:100
        }
    })
</script>

vue语法中关于样式的写法

1.直接在p标签中加class=“backg”
2.通过v-bind,在p标签中加:class="‘backg’"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p class="backg">{{msg}}</p><p :class="'backg'">{{msg}}</p>
        <input type="text" v-model="msg">
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World"
        }
    })
</script>
<style>
    .backg{
        background-color: aquamarine;
    }
</style>

一个class中有多个样式的时候

<p :class="backg fontcolor">{{msg}}</p><p :class="['backg','fontcolor']">{{msg}}</p>

如何控制样式显示与隐藏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
    	<!--1.通过判断flag为是否决定显示哪个class标签-->
        <p :class="['backg',flag?'fontcolor':'fontcolor1']">{{msg}}</p>
        <!--2.0 通过判断flag为是否决定显示哪个class标签-->
        <p :class="['backg',flag?'fontcolor':'']">{{msg}}</p>
        <!--2.1 通过判断flag为是否决定显示哪个class标签-->
        <p :class="['backg',{'fontcolor':flag}]">{{msg}}</p>
        <!--只有一个class的时候不用[]-->
        <p :class="{'fontcolor':flag}">{{msg}}</p>
        <input type="text" v-model="msg">
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World",
            flag:false
        }
    })
</script>
<style>
    .backg{
        background-color: aquamarine;
    }
    .fontcolor{
        color:red;
    }
    .fontcolor1{
        color: blue;
    }
</style>

内联样式

<p style="background-color: brown;">{{msg}}</p>
<!--1.键值对直接填写法:内联样式属性可以不用单引号但是不能有但横线所以background-color要用单引号引起来,后面属性的值要用单引号-->
<p :style="{'background-color': 'brown'}">{{msg}}</p>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
    <!--2.键值对符合json格式的时候-->
        <p :style="style1">{{msg}}</p>
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World",
            style1:{'background-color': 'brown',color:'white'}
        }
    })
</script>
<!--3.多个data可以用数组接收-->
<p :style="[style1,style2]">{{msg}}</p>

<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World",
            flag:false,
            style1:{'background-color': 'brown',color:'white'},
            style2:{'font-size':'18px'}
        }
    })
</script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="vue.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
    <!--通过点击事件修改样式-->
        <p :style="[style1,style2]">{{msg}}</p>
        <button @click="change"></button>
    </div>
</body>
</html>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            msg:"Hello World",
            style1:{'background-color': 'brown',color:'white'},
            style2:{'font-size':'18px'}
        },
        methods:{
            change(){
                this.style2['font-size']="22px";
            }
        }
    })
</script>

当年幼儿园毕业的时候表演节目, 合唱《世上只有妈妈好》。 上台前老师把每个人屁股都打了一巴掌,还不准我们哭。 等到上台越唱越委屈,边唱边哭,感动了全场观众,掌声雷动。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值