Vue学习之内联模板

Vue学习之内联模板

在vue框架中,模板的位置有两种,一种是在组件内部定义,一种是在组件外部定义。
我们首先来看内部的定义,即常见的定义方式:

      Vue.component('child-component',{
                   template:'<div><p>Welcome to Vue!</p></div>',
                       data:function(){
                        return {
                            msg:'在子组件中声明的数据'
                        }
                       }
        });

在这里,我们的模板是在创建一个全局组件时定义在template中的,我们为你来看一下整个代码:

<html>
<head>
    <meta charset="utf-8">
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="app">
    <p>{{message}}</p>
        <child-component>

        </child-component>
    </div>
    <script>
        Vue.component('child-component',{
                   template:'<div><p>Welcome to Vue!</p></div>'
                    });
        var app=new Vue({
            el:'#app',
            data:{
                message:'在父组件中声明的数据'
            }
        });
    </script>
</body>
</html>

渲染之后,结果为:

 <div id="app">
    <p>在父组件中声明的数据</p>
    <div>
        <p>Welcome to Vue!</p>
    </div>
    </div>

那么,我们来看另一种方式:

Vue提供了一种内联模板的功能,在使用组件时,给标签加上inline-complate特性,组件就会把它的内容当作模板,而不是当内容分发。
简单的说(自己的理解):不在创建一个组件时定义它的模板,而是在声明的外部创建。
下面看一个实例:

<html>
<head>
    <meta charset="utf-8">
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="app">
        <child-component inline-template>
             <div>
                <h2>在父组件中定义子组件的模板</h2>
                <p>{{message}}</p>
                <p>{{msg}}</p>
             </div>
        </child-component>
    </div>
    <script>
        Vue.component('child-component',{
                       data:function(){
                        return {
                            msg:'在子组件中声明的数据'
                        }
                       }
        });
        var app=new Vue({
            el:'#app',
            data:{
                message:'在父组件中声明的数据'
            }
        });
    </script>
</body>
</html>

注意,此例创建一个新的组件时,并没有通过template来定义模板。

<child-component inline-template>
             <div>
                <h2>在父组件中定义子组件的模板</h2>
                <p>{{message}}</p>
                <p>{{msg}}</p>
             </div>
        </child-component>

此例时通过在child-component标签中加入inline-component特性,来定义一个模板。
渲染后:

<div id="app">
   <div>
       <h2>在父组件中定义子组件的模板</h2>
       <p>在父组件中声明的数据</p>
       <p>在子组件中声明的数据</p>
   </div>
   </div>

如果有朋友可能心思比较活,尝试两种定义方式一起用,但是,结果只显示inline-complate所定义的
实例如下:

<html>
<head>
    <meta charset="utf-8">
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
</head>
<body>
    <div id="app">
        <child-component inline-template>
             <div>
                <h2>在父组件中定义子组件的模板</h2>
                <p>{{message}}</p>
                <p>{{msg}}</p>
             </div>
        </child-component>

    </div>
    <script>
        Vue.component('child-component',{
            template:'<p>Hello </p>',
                       data:function(){
                        return {
                            msg:'在子组件中声明的数据'
                        }
                       }
        });
        var app=new Vue({
            el:'#app',
            data:{
                message:'在父组件中声明的数据'
            }
        });
    </script>
</body>
</html>

结果只会显示:

在父组件中定义子组件的模板
在父组件中声明的数据
在子组件中声明的数据

缺点:作用域比较难理解,建议不要轻易使用内联模板

发布了32 篇原创文章 · 获赞 10 · 访问量 3433

猜你喜欢

转载自blog.csdn.net/shandamengcheng/article/details/82705798