Vue.js学习笔记(二)

计算属性:computed
<div id="app">
    <p>{{message}}</p>
    <p>{{reserveMess}}</p>
</div>
<script>
    var vm = new Vue({
        el:"#app",
        data:{
            message:"root"
        },
        computed:{
            reserveMess : function(){
            return this.message.split('').reverse.join('');
            }
        }   
    })
</script>

上面的例子中声明了一个计算属性 reversedMessage 。

提供的函数将用作属性 vm.reversedMessage 的 getter。

vm.reversedMessage 依赖于 vm.message,在m.message 发生改变时,vm.reversedMessage 也会更新。

computed VS methods

我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。使用 methods ,在重新渲染的时候,函数总会重新调用执行

computed属性默认只有getter,不过在需要时候可以给computed提供setter :

var vm = new Vue({
    el: '#app',
    data: {
    name: 'Google',
    url: 'http://www.google.com'
    },
    computed: {
        site: {
            // getter
            get: function () {
                return this.name + ' ' + this.url
            },
            // setter
            set: function (newValue) {
                var names = newValue.split(' ')
                this.name = names[0]
                this.url = names[names.length - 1]
            }
        }
    }
})
// 调用 setter, vm.name 和 vm.url 也会被对应更新
vm.site = '百度 http://www.baidu.com';
document.write('name: ' + vm.name);
document.write('<br>');
document.write('url: ' + vm.url);

在运行 vm.site = '百度 http://www.baidu.com'; 时,setter 会被调用,vm.name 和 vm.url 也会被对应更新。(因为computed 是基于它的依赖缓存,相关依赖发生改变时就会重新取值。)

监听属性:watch
<div id="app">
    <input type = "text" v-model = "kilometers">
    <input type = "text" v-model = "meters">
</div>
<p id = "info"></p>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            kilometers:0,
            meters:0
        },
        methods:{
        },
        computed:{
        },
        watch:{
            //检测kilometers和meters 在发生变化时执行后面的函数
            kilometers:function(val){
                this.kilometers = val;
                this.meters = val * 1000;
            },
            meters:function(val){
                this.meters = val;
                this.kilometers = val/1000;
            }
        }
    });
    //$watch 是一个实例,
    vm.$watch('kilometers',function(newVal,oldVal){
        document.getElement('info').innerHTML = "修改前:"+oldVal+" 修改后:"+newVal;
    })
</script>

data 属性中, kilometers 和 meters 初始值都为 0。
watch 对象创建了两个方法 kilometers 和 meters。
当我们再输入框输入数据时,watch 会实时监听数据变化并改变自身的值。

vue属性的绑定:v-bind

Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。
表达式的结果类型除了字符串之外,还可以是对象或数组。

class属性的绑定:

1.

.claName{
//一堆样式
}
<div id = "app" v-bind:class="{ claName: show }"></div>
<script>
new Vue({
    el:"#app",
    data:{
        show:true
    }
});
</script>

当show为true时显示出claName的样式,以上实例为:

2.

.claN1{
    //...
}
.cla-N{
    //...
}

<div id="app" v-bind:class="{claN1:show,'cla-N':false}"></div>

new Vue({
    el:'#app',
    data:{
        show:true,
        noshow:false
    }
})

class类名带’-‘则用“’”引起来,根据类名后的值,决定是否显示该类的样式,
同级class越往后 优先级越高

3.
绑定一个对象:

<div id="app" v-bind:class="claObj"></div>

.claN1{}
.cla-N{}

new Vue({
    el:'#app',
    data:{
        claObj:{
            claN1:true,
            'cla-N':true
        }
    }
})

4.
绑定返回对象的计算属性:

<div id="app" v-bind:class="claObj"></div>

.claN1{}
.cla-N{}

new Vue({
    el:'#app',
    data:{
        isActive:true,
        error:{
            type:'fatal'
        }
    },
    computed:{
        claObj:function(){
            return {
                claN1 : this.isActive && this.error,
                'cla-N': this.error && this.error.type === 'fatal'
            }
        }
    }
})  

5.
利用数组:

.claN1{}
.claN2{}

<div id="app" v-bind:class="['claN1',''claN2']"></div>

new Vue({
    el:'#app',
    data:{
        aC:'claN1',
        er
    }
})

6.errClass 始终存在,在isActive为true时添加actClass:

.class1{}
.class2{}

<div id="app">
    <div v-bind:class="[errClass,isActive?actClass:'']"></div>
</div>

<script>
    new Vue({
        el:'#app',
        data:{
            isActive:true,
            actClass:class1,
            errClass:class2
        }
    })
</script>

7.添加内联样式:

<div id="app">
    <div v-bind:style="{color:actColor,fontSize:actFont/+'px'}"></div>
</div>

new Vue({
    el:'#app',
    data:{
        actColor:'red',
        fontSize:'30px'/30
    }
})

8.内联样式 用数组:

">    <div v-bind:style="[baseStyles,overStyles]"></div>
</div>

new Vue({
    el:'#app',
    data:{
        baseStyles:{
            fontsize:'10px',
            coloe:'red'
        },
        overStyles:{
            'font-weight':'bold'
        }
    }
})

1.v-bind动态绑定指令,默认情况下标签自带属性的值是固定的,在为了能够动态的给这些属性添加值,可以使用v-bind:你要动态变化的值=”表达式”

2:v-bind用于绑定属性和数据 ,其缩写为” : ” 也就是
v-bind:id === :id

3:v-model用在表单控件上的,用于实现双向数据绑定,所以如果你用在除了表单控件以外的标签是没有任何效果的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值