Skip to content

vue 的模板语法与解析(后续放点源码)

template 语法能够允许的数据类型

  • 模板语法不能写语句
  • 值,表达式,计算属性,函数调用都行

template 语法的挂载方式

  • 最常见的就是我们给个 div,给个 id=app,然后 mount 到这个 id 上

  • 另一种指定挂载元素的方法是 script 标签加属性 x-template,和指定 id,最后在 vue 初始化中的 template 中指定 id 让 vue 来读这个 script

js
 <script type="x-template" id="woodbell">
    <div>
      ...
    </div>
  </script>
  Vue.createApp({
      template: "#woodbell",
      ...
    }).mount("#app");
  • 然后是使用原生 template,浏览器不会渲染其中的内容
  • 其实你换什么元素都行,只是 template 特别适合这么来而已,不会重复渲染
js
<template id="woodbell">
    <div>
      <h2>{{message}}</h2>
      <h2>{{counter}}</h2>
      <button @click="increase">+1</button>
      <button @click="decrease">-1</button>
    </div>
  </template>
    Vue.createApp({
    template: "#woodbell",
    ...
  }).mount("#app");

使用模板语法的几种风格

  • 第一种风格,vue2

    js
    <script>
    export default {
      data() {
        return {
          age: 18,
        };
      },
    };
    <script>
    <template>
      <div>{{ !age }}</div>
    </template>
  • 第二种风格 setup 函数

    js
    <script>
    export default {
      setup() {
        const age = 18;
        return {
          age,
        };
      },
    };
    </script>
    <template>
      <div>{{ age? '1':'3' }}</div>
    </template>;
  • 第三种 setup 语法糖

    js
    <script setup>
      const age = [1,2,3,4,5]
    </script>
    <template>
      <div>{{ age.map(item => ({num: item})) }}</div>
    </template>;

template 语法的作用核心(这一部分可以适当放点源码)

  • template 是 vue 帮我们渲染的 html,其中的标签会替换我们挂载元素的 innerHtml
  • react 实际上都是写 jsx,然后 babel 编译为 react.createElement 函数处理
  • vue 大多数时候用原生模板,也允许你手动拿 dom
  • 最后都编译为虚拟 dom 渲染函数