Vue里標簽嵌套限制問題解決------解析DOM模板時注意事項:


受到html本身的一些限制,像<ul>、<ol>、<table>、<select>這樣的元素里允許包含的元素有限制,而另一些像<option>這樣的元素只能出現在某些特定元素的內部。變通的方案是使用特殊的 is 特性

 

應當注意,如果使用來自以下來源之一的字符串模板,則沒有這些限制:

 

--------<script type="text/x-template">

 

--------<javascript>內聯模板字符串

 

--------.vue組件

 

這句話意思是:

 

這樣不可以

 

<body>

    <div id="app">

        <select>

            <optioncomp></optioncomp>

        </select>

    </div>

    <script src="lib/vue.js"></script>

    <script>

        new Vue({

            el: '#app',

            components:{

                'optioncomp':{

                    template: '<option >a</option>'

                }

            }

        })

    </script>

</body>

但是用 is 特殊屬性可以

<body>

    <div id="app">

        <select>

            <option is="optioncomp"></option>

        </select>

    </div>

    <script src="lib/vue.js"></script>

    <script>

        new Vue({

            el: '#app',

            components:{

                'optioncomp':{

                    template: '<option >a</option>'

                }

            }

        })

    </script>

</body>

或者temp模板標簽也可以

<body>

    <div id="app">

        <select>

            <option is="optioncomp"></option>

        </select>

 

        <!--模板內容存放區域-->

        <script type="x-template" id="optioncompTemp">

            <option >a</option>

        </script>

    </div>

    <script src="lib/vue.js"></script>

    <script>

        new Vue({

            el: '#app',

            components:{

                'optioncomp':{

                    template: '#optioncompTemp'

                }

            }

        })

    </script>

</body>

或者內聯模板字符串也行

<body>

    <div id="app">

        <selectcomp></selectcomp>

    </div>

    <script src="lib/vue.js"></script>

    <script>

        Vue.component('optioncomp',{

            template: '<option >a</option>'

        });

        new Vue({

            el: '#app',

            components:{

                'selectcomp':{

                    template: ' <select> <optioncomp></optioncomp></select>'

                }

            }

        })

    </script>

</body>

當然了,單頁應用的組件文件xxx.vue更是沒問題了,就不演示了。

受到html本身的一些限制,像<ul>、<ol>、<table>、<select>這樣的元素里允許包含的元素有限制,而另一些像<option>這樣的元素只能出現在某些特定元素的內部。變通的方案是使用特殊的 is 特性

應當注意,如果使用來自以下來源之一的字符串模板,則沒有這些限制:

--------<script type="text/x-template">

--------<javascript>內聯模板字符串

--------.vue組件

這句話意思是:

這樣不可以

 

  1.  
    <body>
  2.  
    <div id="app">
  3.  
    <select>
  4.  
    <optioncomp> </optioncomp>
  5.  
    </select>
  6.  
    </div>
  7.  
    <script src="lib/vue.js"> </script>
  8.  
    <script>
  9.  
    new Vue({
  10.  
    el: '#app',
  11.  
    components:{
  12.  
    'optioncomp':{
  13.  
    template: '<option >a</option>'
  14.  
    }
  15.  
    }
  16.  
    })
  17.  
    </script>
  18.  
    </body>

但是用 is 特殊屬性可以

 

  1.  
    <body>
  2.  
    <div id="app">
  3.  
    <select>
  4.  
    <option is="optioncomp"> </option>
  5.  
    </select>
  6.  
    </div>
  7.  
    <script src="lib/vue.js"> </script>
  8.  
    <script>
  9.  
    new Vue({
  10.  
    el: '#app',
  11.  
    components:{
  12.  
    'optioncomp':{
  13.  
    template: '<option >a</option>'
  14.  
    }
  15.  
    }
  16.  
    })
  17.  
    </script>
  18.  
    </body>

或者temp模板標簽也可以

  1.  
    <body>
  2.  
    <div id="app">
  3.  
    <select>
  4.  
    <option is="optioncomp"> </option>
  5.  
    </select>
  6.  
     
  7.  
    <!--模板內容存放區域-->
  8.  
    <script type="x-template" id="optioncompTemp">
  9.  
    <option >a </option>
  10.  
    </script>
  11.  
    </div>
  12.  
    <script src="lib/vue.js"> </script>
  13.  
    <script>
  14.  
    new Vue({
  15.  
    el: '#app',
  16.  
    components:{
  17.  
    'optioncomp':{
  18.  
    template: '#optioncompTemp'
  19.  
    }
  20.  
    }
  21.  
    })
  22.  
    </script>
  23.  
    </body>

或者內聯模板字符串也行

 

  1.  
    <body>
  2.  
    <div id="app">
  3.  
    <selectcomp> </selectcomp>
  4.  
    </div>
  5.  
    <script src="lib/vue.js"> </script>
  6.  
    <script>
  7.  
    Vue.component( 'optioncomp',{
  8.  
    template: '<option >a</option>'
  9.  
    });
  10.  
    new Vue({
  11.  
    el: '#app',
  12.  
    components:{
  13.  
    'selectcomp':{
  14.  
    template: ' <select> <optioncomp></optioncomp></select>'
  15.  
    }
  16.  
    }
  17.  
    })
  18.  
    </script>
  19.  
    </body>

當然了,單頁應用的組件文件xxx.vue更是沒問題了,就不演示了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM