零基础学习 Vue.JS ——(2)

Vue.js观察属性
Vue提供了watch属性这种更通用的方式来观察和响应数据的变动
watch属性的回调函数没有返回值,回调函数可以执行一些复杂的任务,比如绘制图形等。因为watch属性没有返回值,所以不适合在表达式中使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <canvas id="test" width="300" height="300"></canvas>
</div>

<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
    el:"#app",
    data:{
        r:0
    },
    watch:{
        r:function(newValue,oldValue){
            var c=document.getElementById("test");
            var ctx=c.getContext("2d");
            ctx.beginPath();
            ctx.clearRect(0,0,300,300);
            ctx.lineWidth=5;
            ctx.strokeStyle="red";
            ctx.arc(100,100,newValue,0,360*Math.PI/180);
            ctx.stroke();
        }

    }
});

在控制台输入app.r=10就会出现半径为10的圆形,如图:
这里写图片描述

Vue文本插值

数据绑定最常见的形式就是使用大括号的文本插值比如:{{username}},如果模型层中数据对象也就是data中的username属性发生了改变,插值处的内容就会更新。
插值是单向绑定的,数据对象发生变化会体现在插值上,但是插值变化不会体现在数据对象上,也就是在视图层的html中修改username的值模型层中的不会随之改变。
而使用双大括号插值,如果vue没有完成对页面的渲染,那么用户是会短暂的看到插值表达式的,解决这个问题可以使用v-text指令来替代

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

通过使用 v-once指令,你也能执行一次性地插值,当数据改变时,插值 处的内容不会更新。

<div id="app">
<p><input type="text" v-model="username"></p> 
<p><span v-once>Hello,{{username}}</span></p>
</div>

HTML插值

双大括号会将数据解释为纯文本,而非 HTML 。为了输出真正的 HTML , 你需要使用 v-html指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <div v-html="content"></div>
</div>

<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
    el:"#app",
    data:{
        content:"<a href='http://www.baidu.com'>百度</a>"
    }
});

只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值。

data: {
article: "<a href='javascript:alert(1)'>抽奖</a>" }

会执行alert(1),可能执行这句话没什么大问题,但是当你插入的是一大段javascript代码就会对整个程序产生很大的影响,程序安全性也会下降。

属性插值
如果要对HTML元素属性插值,应该使用 v-bind 指令。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .red-btn{
            color:red;
        }
    </style>
</head>
<body>
<div id="app">
    <p>
        <input type="button" value="报名" v-bind:disabled="age<18" v-bind:class="btn">
    </p>
</div>

<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
    el:"#app",
    data:{
        username:"haha",
        age:14,
        btn:"red-btn"
    }
});

插值中的表达式
在模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数 据绑定, Vue.js 都提供了完全的 JavaScript 表达式支持。

<p>{{username.slice(0,3)}}</p> 
<p>{{Math.round(salary/22)}}</p> 
<p>{{sex=="male"&&age>=18}}</p>
<p v-bind:class="sex=='female'?'pink':'blue'">Hello</p> 
<p>{{ var a = 1 }}</p>

这些写法都是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值