v-if 的判断问题,是如何进行判断的

问题遇到的现象和发生背景 在vue文档中练习 v-if 的时候用" template " 和 自定义模板时产生的结果不一样

这是用 template 运行的

        <div id="panduan">
            
            <h1 v-if="awesome">Vue is awesome!h1>
            <h1 v-else>Oh no 😢h1>
            
            <template v-if="ok">
              <h1>Titleh1>
              <p>Paragraph 1p>
              <p>Paragraph 2p>
            template>


        <script>
            var vm = new Vue({
                el:"#panduan",
                data:{
                    awesome:false,
                    ok:true
                }
            })
        script>
            
        div>

结果如下

img

这是用 自定义组件 运行的

<div id="panduan">
            
            <h1 v-if="awesome">Vue is awesome!h1>
            <h1 v-else>Oh no 😢h1>
            
            <aaa v-if="ok">
              <h1>Titleh1>
              <p>Paragraph 1p>
              <p>Paragraph 2p>
            aaa>
            
        div>
        
        <script>
            Vue.component('aaa',{
                template:'
                <h1>Titleh1>
                <p>Paragraph 1p>
                <p>Paragraph 2p>
                '
            })
            var vm = new Vue({
                el:"#panduan",
                data:{
                    awesome:false,
                    ok:true
                }
            })
        script>

结果如下

img

我认为不管是 template 或者是自定义组件编译结果应该都是一样的吧


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="panduan">

        <h1 v-if="awesome">Vue is awesome!</h1>
        <h1 v-else>Oh no 😢</h1>

        <aaa v-if="ok">
            <h1>Title</h1>
            <p>Paragraph 1</p>
            <p>Paragraph 2</p>
        </aaa>

    </div>

</body>

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
<script>
    Vue.component('aaa', {
        template: '<div><h1> Title</h1><p>Paragraph 1</p><p>Paragraph 2</p></div>'

    })
    var vm = new Vue({
        el: "#panduan",
        data: {
            awesome: false,
            ok: true
        }
    })
</script>

</html>

自定义组件中template的多行字符串,需要使用的是反单引号`,而不是单引号'。这是es6的标准,用错会报错。这里改掉多行字符串引用错误的符号,就能正确显示了。