vue数据绑定

一、绑定样式

Vue提供了样式绑定功能,可以通过绑定内联样式和绑定样式类这两种方式来实现。

1.1 绑定内联样式

在Vue实例中定义的初始数据data,可以通过v-bind将样式数据绑定给DOM元素。

<div id="app">
    <div v-bind:style="{backgroundColor:pink,width:width,height:height}">
        <div v-bind:style="myDiv"></div>
    </div>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            myDiv:{backgroundColor:'red',width:'100px',height:'100px'},
            pink:'pink',
            width:'100%',
            height:'200px'
        }
    });
</script>

  

CSS内联样式基本语法:
<div style="background-color: pink; width: 100%; height: 200px;"></div>
绑定内联样式的Vue语法1
<div v-bind:style="{backgroundColor:'pink',width:'100%',height:'200px'}"></div>

1.2 绑定样式类

css代码:

.box{
            background-color:pink;
            width: 100%;
            height: 200px;
        }
        .inner{
            background-color: red;
            width: 100px;
            height: 50px;
        }
        .mark{
            border: 2px solid gold;
        }

  html代码:

<div id="app">
    <div v-bind:class="{box}">
        我是box
        <div v-bind:class="{inner}">我是inner1</div>
        <div v-bind:class="[inner,mark]">我是inner2</div>
    </div>
</div>

  JavaScript代码:

var vn=new Vue({
        el:'#app',
        data:{
            box:'box',
            inner:'inner',
            mark:'mark'
        }
    });

  

样式类语法:<div class="box"></div>,绑定样式类的Vue语法为<div v-bind:class="{box}"></div>
若样式类语法:<div class="inner mark"></div>,绑定样式类的Vue语法为<div v-bind:class="[inner,mark]">

二、内置指令
2.1 指令的基本概述
Vue的指令书写规则以v开头,后缀用来区分指令的功能,且通过短横线连接。指令时特殊的属性,指令必须写在DOM元素上。

2.2 指令参数
2.2.1 参数
一些指令能够接收一个“参数”,在指令名称之后以冒号表示。
<a v-bind:href="url"></a>

2.2.2 动态参数

<div id="app">
    <div v-bind:[mark]="option"></div>
    <div v-bind:[mark]="[option,flag]"></div>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            mark:'name',
            flag:'wcj',
            option:'wch'
        }
    });
</script>

  

2.2.3 指令修饰符
修饰符是以半角句号.指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。
<form v-on:submit.prevent="onSubmit"></form>

例如,.prevent修饰符告诉v-on指令对于触发的事件调用event.preventDefault()

2.3 常用内置指令

 

 

2.3.1 v-model

v-model主要实现数据双向绑定,通常用在表单元素上。

<div id="app">
    <input type="text" v-model="msg">
    <p>{{msg}}</p>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'V-model质量'
        }
    });
</script>

  

2.3.2 v-text

v-text是在DOM元素内部插入文本内容。

<div id="app">
    <p v-text="msg"></p>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'我是v-text'
        }
    });
</script>

  其下所有内容效果是一样的:

<span v-text="msg"></span>
<!-- 和下面的一样 -->
<span>{{msg}}</span>

  

2.3.3 v-html

v-html是在DOM元素内部插入HTML标签内容。

<div id="app">
    <div v-html="msg"></div>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'<h2>我是v-html添加的内容</h2>'
        }
    });
</script>

  代码实现效果为,在div内部插入二号标题:

<div id="app">
	<div>
		<h2>我是v-html添加的内容</h2>
	</div>
</div>

  

2.3.4 v-bind

v-bind可以实现单向数据绑定(属性绑定)。
简写::
如下:<input :value="msg">

<div id="app">
    <input v-bind:value="msg">
    <p>{{msg}}</p>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            msg:'我是v-bind内容'
        }
    });
</script>

  ==注意:==当改变vm.msg值时,页面中数据会自动更新,但不能实现视图驱动数据变化。

2.3.5 v-on

v-on是事件监听指令,直接与事件类型配合使用。
缩写@
如下:<button @click="showInfo">请单击</button>

<div id="app">
    <p>{{msg}}</p>
    <button v-on:click="showInfo">请单击</button>
</div>

  

var vm=new Vue({
        el:'#app',
        data:{
            msg:'请单击按钮查看内容'
        },
        methods:{
            showInfo (){
                this.msg='我是单击后内容';
            }
        }
    });

  

2.3.6 v-for

v-for可以实现页面列表渲染,可以循环Array | Object | number | string | Iterable (2.6 新增)
此指令之值,必须使用特定语法 alias in expression,为当前遍历的元素提供别名:

<div v-for="item in items">
  {{ item.text }}
</div>

  另外也可以为数组索引指定别名 (或者用于对象的键):

<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, name, index) in object"></div>

  实例:

<div id="app">
    <div v-for="(item,key) in list" :data-id="key">
        索引是:{{key}},元素内容是{{item}}
    </div>
</div>

  

 var vm=new Vue({
        el:'#app',
        data:{
            list:[1,2,3]
        }
    });

  

2.3.7 v-if和v-show

v-if用来控制元素显示或隐藏,属性为布尔值。
v-show可以实现与v-if同样的效果,但是v-show是操作元素的display属性,而v-if会对元素进行删除和重新创建,所以v-if在性能上不如v-show

v-if相关代码:

<div id="app">
    <div v-if="isShow" style="background-color: #ccc;">我是v-if</div>
    <button @click="isShow=!isShow">显示/隐藏</button>
</div>

  

var vm=new Vue({
        el:'#app',
        data:{
            isShow:true
        }
    });

  v-show相关代码

<div id="app">
    <div v-show="isShow" style="background-color: #ccc;">我是v-show</div>
    <button @click="isShow=!isShow">显示/隐藏</button>
</div>

  

<script>
    var vm=new Vue({
        el:'#app',
        data:{
            isShow:true
        }
    });
</script>

  注意:v-ifv-show在代码显示的不同

posted @ 2022-05-12 10:58  杨远宁  阅读(103)  评论(0编辑  收藏  举报