【零基础入门Vue0007】_Vue的模板语法

122 阅读2分钟

root容器里面的代码被称为Vue模板

有了模板,就得有特殊的模板语法。截止目前,学会的只有一个模板语法,即插值语法。除了插值语法,还有什么呢?

一、插值语法

功能:往往用于指定或解析标签体内容,也就是标签体里面的内容。

例如:<h1>标签体内容</h1>

写法:{{xxx}}xxxjs表达式,且可以直接读取到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>

报错信息:

image.png

2.2 正确写法

v-bind就属于Vue里面的一个指令,Vue里面的指令都是v-xxxv开头。

以后可能会学到,v-ifv-modelv-???

<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>

hellohi拿出来当变量去执行,发现在读取变量hellohi,如果data中没定义该变量,就会报错。

image.png

改正方法:

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>