八、动态绑定class和style

用 <b>v-bind 指令</b>(以后都用缩写的形式)来动态绑定一个标签的属性。

一、绑定class

<b>(1)对象语法来绑定class:</b>动态绑定的class的值是一个对象{ ‘active’ : isActive },isActive是我们vm实例的数据,值为true,

<div id="app">
    <p :class="{'active':isActive,'danger':isDanger,'error':isError}">这是文字</p>    
</div>
<script>
new Vue({
    el:"#app",
    data:{
        isActive:true,
        isDanger:true,
        isError:false,       
    }
})
</script>
渲染成功

<strong>释:</strong>class的值最后被渲染成:“active danger”,在对象中,<b>值为true的会被成功渲染出来,为false的则不会被渲染出来。</b>
一旦vm实例对应的数据发生变化,比如isActive的值由true变成false,视图上的’active’ 类也会被删除,这样就会实现动态绑定样式啦!

eg:之前的一个例子动态绑定class
<style>
/* 默认状态下*/  
#app div div cite{  
  background: darkred;  
  color: #fff;  
}
/* 没有结束状态下*/  
#app div div .finish{ 
  background:#ccc; 
  color: #000000;
 }
</style>
<!--添加动态class名字-->
<div id="app">
  <my-list 
     v-for="amk_pp in amk_list" 
     :detail="amk_pp"
  ></my-list>
</div>
<script>
Vue.component('my-list',{
  props:['detail'],
  template:`
  <div style="margin-top:10px;">
    <span><a>< img src="detail.img_url“ /></a></span>
    <div>
      <h5><a>{{detail.title}}</a></h5>
      <p>特卖价:<b>{{detail.sale_price}}</b></p>
      <p><a>{{detail.org_price}}</a></p>
      <cite :class="{'finish':detail.ended}">{{detail.state}}</cite>
      <!-- :class就是动态绑定class名字-->
       </div>
</div>`
});

new Vue({
    el:"#app",
    data:{
        amk_list:[
            {
                img_url:"../images/bird1.png",
                title:"精选牛肉精选牛肉精选牛肉",
                sale_price:"¥56800",
                org_price:"原价:¥76000",
                state:"立即购买",
                ended:false,
            },
            {
                img_url:"../images/bird2.png",
                title:"hiddensmile",
                sale_price:"¥123200",
                org_price:"原价:¥200000",
                state:"已结束",
                ended:true,
            },         
        ]
    }
});
</script>
动态加载class成功

<b>(2)数组语法语法来绑定class:</b>动态绑定的class的值是数组有两个元素[ activeClass , errorClass ],它们对应的值是vm实例的数据data:

<div id="app">
    <p :class="[activeClass,errorClass,borderClass]">这是数组语法</p>
</div>
<script>
new Vue({
    el:"#app",
    data:{
        activeClass:'active',
        errorClass:'error',
        borderClass:'border',
    }
})
</script>
渲染成功

<strong>释:</strong>渲染的时候,activeClass、errorClass和borderClass对应的值就会被渲染成class。

二、绑定内联样式style

<b>(1)对象语法来绑定class:</b>看着非常像 CSS ,其实它是一个 JavaScript 对象。 CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case):

<div id="app">
       <p :style="{color:color_style}">绑定内联样式style</p>
    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">绑定内联样式style 对象语法来绑定class</div>
</div>
<script>
new Vue({
    el:"#app",
    data:{
        color_style:'orange',
        activeColor:'pink',
        fontSize:30,
    }
})
渲染成功

直接绑定到一个样式对象通常更好,让模板更清晰:

<div id="app">
    <p :style="objStyle">绑定内联样式 绑定到一个样式对象</p>
</div>
<script>
new Vue({
    el:"#app",
    data:{
        objStyle:{
            color: 'red',
            fontSize: '20px',
            height:'30px',
            border:' 1px solid #ccc',
        }
    }
})
</script>
渲染成功

<b>(2)数组语法语法来绑定class:</b>动态绑定的class的值是数组有两个元素[objStyle,colorStyle]

<div id="app">
    <div :style="[objStyle,colorStyle]">绑定内联样式style 数组语法</div>
</div>
<script>
new Vue({
    el:"#app",
    data:{
        objStyle:{
            fontSize: '20px',
            height:'30px',
        },
        colorStyle:{
            color: 'red',
            border:' 1px solid #ccc',
        }
    }
})
</script>
渲染成功
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,088评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,268评论 0 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 站台上,眼前净是来来往往,站牌上的其他号码都循环了不止几次,你等的那趟独独未到。 饭桌上,狐朋狗友都已聚齐,寒暄海...
    三文鱼子阅读 233评论 0 0