二、vue模板语法

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>

注:若侵权,请联系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值