美文网首页程序员
Vue学习之内联模板

Vue学习之内联模板

作者: shandamengcheng | 来源:发表于2018-09-14 17:10 被阅读0次

    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>
    

    结果只会显示:

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

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

    相关文章

      网友评论

        本文标题:Vue学习之内联模板

        本文链接:https://www.haomeiwen.com/subject/qsaogftx.html