Vue.js笔记-计算属性 class与style绑定

         Vue.js 将绑定表达式限制为一个表达式。 如果需要多于一个表达式的逻辑,应当使用计算属性。
    
    
    
    
  1. <div id="example">
  2.      a={{ a }}, b={{ b }}
  3. </div>
  4. var vm = new Vue({
  5.       el: '#example',
  6.      data: {
  7.        a: 1
  8.      },
  9.      computed: {
  10.        // 一个计算属性的 getter
  11.        b: function () {
  12.          // `this` 指向 vm 实例
  13.          return this.a + 1
  14.        }
  15.      }
  16. })
  17. console.log(vm.b) // -> 2
  18. vm.a = 2
  19. console.log(vm.b) // -> 3,vm.b 依赖于 vm.a

计算属性vs.$watch

        $watch用于观察vue实例上的数据变动,通常更好的办法是使用计算属性而不是一个命令式的$watch回调。
$watch回调:
    
    
    
    
  1. <div id="demo">{{fullName}}</div>
  2. var vm = new Vue({
  3.   el: '#demo',
  4.   data: {
  5.     firstName: 'Foo',
  6.     lastName: 'Bar',
  7.     fullName: 'Foo Bar'
  8.   }
  9. })
  10.  
  11. vm.$watch('firstName', function (val) {
  12.   this.fullName = val + ' ' + this.lastName
  13. })
  14.  
  15. vm.$watch('lastName', function (val) {
  16.   this.fullName = this.firstName + ' ' + val
  17. })
计算属性:
    
    
    
    
  1. var vm = new Vue({
  2.   el: '#demo',
  3.   data: {
  4.     firstName: 'Foo',
  5.     lastName: 'Bar'
  6.   },
  7.   computed: {
  8.     fullName: function () {
  9.       return this.firstName + ' ' + this.lastName
  10.     }
  11.   }
  12. })
计算setter:
    
    
    
    
  1. // ...
  2. computed: {
  3.   fullName: {
  4.     // getter
  5.     get: function () {
  6.       return this.firstName + ' ' + this.lastName
  7.     },
  8.     // setter
  9.     set: function (newValue) {
  10.       var names = newValue.split(' ')
  11.       this.firstName = names[0]
  12.       this.lastName = names[names.length - 1]
  13.     }
  14.   }
  15. }
  16. // ...

class与style绑定

        操作元素的class列表和它的内联样式,用v-bind处理,只需要计算出表达式最终的字符串,表达式的结果类型 除了字符串之外,还可以是对象或数组
绑定HTML Class
写法:
1.用mustache标签绑定class,比如class ="{{className}}"
2.v-bind : class  v-bind动态绑定指令,默认情况下标签自带属性的值是固定的,在为了能够动态的给这些属性添加值,可以使用v-bind:动态变化的值="表达式"
对象语法:
        传给v-bind:class一个对象,动态地切换class,可以与普通的class特性共存。
     
     
     
     
  1. <div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div>
  2. data: {
  3.   isA: true,
  4.   isB: false
  5. }
       渲染为:
     
     
     
     
  1. <div class="static class-a"></div>
        也可以直接绑定数据里的一个对象
    
    
    
    
  1. <div v-bind:class="classObject"></div>
  2. data: {
  3.   classObject: {
  4.     'class-a': true,
  5.     'class-b': false
  6.   }
  7. }
数组语法:
        把一个数组传给v-bind:class,以应用一个class列表
    
    
    
    
  1. <div v-bind:class="[classA, classB]">
  2. data: {
  3.   classA: 'class-a',
  4.   classB: 'class-b'
  5. }
       渲染为:
    
    
    
    
  1. <div class="class-a class-b"></div>
       如果你也想根据条件切换列表中的 class,可以用三元表达式:
    
    
    
    
  1. <div v-bind:class="[classA, isB ? classB : '']">//此例始终添加classA,但是只有在isB是true时添加classB
  2. <div v-bind:class="[classA, { classB: isB, classC: isC }]">//在数组语法中使用对象语法
绑定内联样式
对象语法:
        v-bind:styles的对象语法是一个JavaScript对象,CSS属性名可以用驼峰式或短横分隔命名。
    
    
    
    
  1. <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
  2. data: {
  3.   activeColor: 'red',
  4.   fontSize: 30
  5. }
        也可以直接绑定到一个样式对象上:
    
    
    
    
  1. <div v-bind:style="styleObject"></div>
  2. data: {
  3.   styleObject: {
  4.     color: 'red',
  5.     fontSize: '13px'
  6.   }
  7. }
数组语法:
        将多个样式应用到一个元素上
    
    
    
    
  1. <div v-bind:style="[styleObjectA, styleObjectB]">
自动添加前缀
       当 v-bind:style 使用需要厂商前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

你可能感兴趣的:(Vue.js笔记-计算属性 class与style绑定)