root容器里面的代码被称为Vue模板。
有了模板,就得有特殊的模板语法。截止目前,学会的只有一个模板语法,即插值语法。除了插值语法,还有什么呢?
一、插值语法
功能:往往用于指定或解析标签体内容,也就是标签体里面的内容。
例如:
<h1>标签体内容</h1>写法:
{{xxx}},xxx是js表达式,且可以直接读取到data所有属性。
实现的功能很单一,只是把指定的值放到指定的位置。
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>插值语法</h1>
<h2>你好,{{name}}</h2>
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
name:'jack'
}
})
</script>
</body>
二、指令语法
管理标签属性里面的内容。
例如:
<div :class="x">456</div>功能:用于解析标签,包括标签属性、标签体内容、绑定事件
举例:
v-bind:href="xxx"或 简写为:href = "xxx",xxx同样要写js表达式。且可以直接读取到data中所有属性。 备注:Vue中有很多指令,且形式都是:v-???,此处我们只是拿v-bind举个例子。
完成的事情比较高端,完成的功能很强大。
2.1 错误写法
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>指令语法</h1>
<!-- 跳转地址写死了 -->
<a href="http://www.atguigu.com">尚硅谷官网</a>
<!-- 错误写法,链接里面写的内容就是url,链接地址是url -->
<a href="url1">百度一下</a>
<a href={{url2}}>打开淘宝</a>
<!-- 上面两个是最简单类型的标签属性:值是url1和{{url2}} -->
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
url1:'https://www.baidu.com',
url2:'https://www.taobao.com'
}
})
</script>
报错信息:
2.2 正确写法
v-bind就属于Vue里面的一个指令,Vue里面的指令都是v-xxx,v开头。
以后可能会学到,v-if、v-model、v-???
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>指令语法</h1>
<!-- 这里的url当成js表达式去执行了 -->
<!-- 表达式url代表读取data里面的url变量 -->
<a v-bind:href="url" x="hello" :y="hi">打开百度</a>
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
url:'https://www.baidu.com'
}
})
</script>
</body>
把hello和hi拿出来当变量去执行,发现在读取变量hello和hi,如果data中没定义该变量,就会报错。
改正方法:
data:{
url:'https://www.baidu.com'
hello:'你好'
}
可以正常写一个标签属性,也可以使用指令来写:
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>指令语法</h1>
<div class="demo1">123</div>
<div :class="x">456</div>
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
x:'demo1'
}
})
</script>
</body>
2.3 一个对象里面有两个重名的key
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>指令语法</h1>
<h1 :class="name">{{name}}</h1>
<h2 :class="school.address">{{school.name}}</h2>
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
//下面是三组key-value
name:'张三',
//全部都以最后写的为主
name:'zhangsan',
school:{
name:'昆一中',
address:'云南昆明'
}
}
})
</script>
</body>
2.4 总结
v-bind绑定,把双引号里的表达式,也就是属性值,执行的结果绑定给前面的属性名。
v-bind可以指定任何一个属性。
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>指令语法</h1>
<!-- toUpperCase()不生效 -->
<div class="demo1.toUpperCase()">{{x}}</div>
<!-- toUpperCase()生效 -->
<div :class="x.toUpperCase()">{{x}}</div>
<div class="Date.now()">123</div>
<div :class="Date.now()">123</div>
</div>
<script src="js/vue.js"></script>
<script>
<!-- 创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
x:'demo1'
}
})
</script>
</body>