Vue语法与语句
Vue模板语法
Vue使用了基于html 的模板语法,允许开发者声明式的将DOM绑定至底层Vue实例 的数据(Vue的模板是基于DOM实现的,所有的Vue模板都是可解析的html),从根本上不同于基于字符串 的模板
核心: 允许采用简洁的模板语法来声明式的将数据渲染进DOM的系统
插值
文本
数据绑定最基础的形式就是使用**{{…}}** (双大括号)的文本插值
<span> Message:{{msg}}</span>
{{…}} 标签会被相应数据对象的msg属性的值替换,当这个属性发生变化时它也会更新。
<body>
<div id="app">
<p>{{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})
</script>
</body>
运行结果:
可以只处理单次插值,今后的数据变化就不会引起插值更新
<span> Message:{{* msg}}</span>
Html
使用v-html指令 用于输出html代码
<div id="app">
<div v-html="message"></div>
</div>
<script>
new Vue({
el: '#app',
data: {
message: '<h1>菜鸟教程</h1>'
}
})
</script>
输出结果:
属性
HTML属性中的值应使用v-bind指令 ,该指令用于响应地更新HTML特性
<style>
.class1{
background: #444;
color: #eee;
}
</style>
<body>
<div id="app">
<label for="r1">修改颜色</label><input type="checkbox" v-model="use" id="r1">
<br><br>
<div v-bind:class="{'class1': use}">
v-bind:class 指令
</div>
</div>
class是参数,它告诉v-bind指令将元素的class特性跟表达式class1的值绑定
表达式
到目前为止,模板只绑定到简单的属性键。不过实际上vue.js在数据绑定内支持全功能的javascript(表达式放在{{…}}中)
表达式将在所属的Vue实例的作用域内计算
<body>
<div id="app">
{{5+5}}<br>
{{ ok ? 'YES' : 'NO' }}<br>
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id">菜鸟教程</div>
</div>
<script>
new Vue({
el: '#app',
data: {
ok: true,
message: 'RUNOOB',
id : 1
}
})
</script>
</body>
运行结果:
限制: 每个绑定只能包含单个表达式 ,因此下面的语句是无效的
<!--这是一个语句,不是一个表达式-->
{{var a = 1}}
<!-- 流程控制也不可以,可改用三元表达式-->
{{if(ok){ return message()} }}
指令
什么是指令: 指令是带有v-前缀的特殊属性
作用: 指令用于在表达式的值改变时,将某些行为应用到DOM上
<p v-if="seen">现在你看到我了</p>
v-if指令将根据表达式seen的值(true或false)来决定是否插入p元素
参数
参数是在指令后面以冒号指明。例如,v-bind指令被用来响应地更新HTML属性
<div id="app">
<pre><a v-bind:href="url">菜鸟教程</a></pre>
</div>
<script>
new Vue({
el: '#app',
data: {
url: 'http://www.runoob.com'
}
})
</script>
href是参数,告知v-bind指令将该元素的href属性与表达式url的值绑定
v-on指令: 用于监听DOM事件
<a v-on:click="doSomething"> //这里的参数(click="doSomething)是监听的事件名
修饰符
修饰符以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊的方式绑定。
例如:.prevent修饰符告诉v-on指令对于触发的事件调用event.preventDefault()
<form v-on:submit.prevent="onSubmit></form>
用户输入
在input输入框中可以使用v-model 指令来实现双向数据绑定
<div id="app">
<p>{{ message }}</p>
<input v-model="message">
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Runoob!'
}
})
</script>
v-model指令用来在input 、select、textarea、checkbox、radio等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值
按钮事件 使用v-on监听事件,并对用户的输入进行响应
点击按钮对字符串进行反转操作:
<div id="app">
<p>{{message}}</p>
<button v-on:click="reverseMessage">反转</button>
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
message:"Runoob!"
},
methods:{
reverseMessage: function(){
this.message = this.message.split('').reverse().join('');
}
}
})
</script>
过滤器
Vue.js允许在表达式后面添加可选的“过滤器”,允许自定义。由“管道符”指示,格式如下:
<!--再两个大括号中-->
{{ message | capitalize }}
<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>
过滤器接受表达式的值作为第一个参数参数,
<div id="app">
{{ message | capitalize }}
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'runoob'
},
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})
</script>
输出结果:Runoob
过滤器可以串联:
{{ message | filterA | filterB }}
过滤器是 JavaScript 函数,因此可以接受参数:
{{ message | filterA('arg1', arg2) }}
message 是第一个参数,字符串 ‘arg1’ 将传给过滤器作为第二个参数, arg2 表达式的值将被求值然后传给过滤器作为第三个参数。
缩写
v-bind缩写
<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>
v-on缩写
<!-- 完整语法 -->
<a v-on:click="doSomething"></a>
<!-- 缩写 -->
<a @click="doSomething"></a>
注:若侵权,请联系