slot插槽

  1. <body>
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. <!-- 在组件标签中间写的内容默认不渲染, 因为这些数据会被传入子组件由子组件渲染, 子组件模板中使用slot标签接收这些数据 -->
  5. <my-com>这是子组件</my-com>
  6. <!-- 组件标签通过插槽传值,可以传递任意标签结构 -->
  7. <my-com>
  8. <ul>
  9. <li>111</li>
  10. <li>222</li>
  11. <li>333</li>
  12. </ul>
  13. </my-com>
  14. </div>
  15. <!-- 组件模板 -->
  16. <template id='myTem'>
  17. <div>
  18. <!-- slot标签叫做插槽, 可以接收组件标签中间写的数据 -->
  19. <slot></slot>
  20. <hr>
  21. <!-- 每一个slot都会渲染一次插槽数据 -->
  22. <slot></slot>
  23. </div>
  24. </template>
  25. <script>
  26. Vue.component('myCom', {
  27. template: '#myTem',
  28. // 组件对象中拿不到slot插槽数据, 无法对插槽数据进行监听和修改
  29. })
  30. new Vue({
  31. el: '#myApp',
  32. data: {
  33. }
  34. })
  35. </script>
  36. </body>

具名插槽

  1. slot标签添加name属性叫具名插槽, 可以接收slot属性相对应的标签, 具名插槽可实现插槽数据的拆分,并插入不同的位置
  1. <body>
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. <my-com>
  5. <h1 slot="myName">{{name}}</h1>
  6. <h2 slot="myage">{{age}}</h2>
  7. </my-com>
  8. </div>
  9. <!-- 组件模板 -->
  10. <template id='myTem'>
  11. <div>
  12. 父组件中的name: <slot name="myName"></slot>
  13. 父组件中的age: <slot name="myage"></slot>
  14. </div>
  15. </template>
  16. <script>
  17. Vue.component('myCom', {
  18. template: '#myTem',
  19. data(){
  20. return{
  21. }
  22. }
  23. })
  24. new Vue({
  25. el: '#myApp',
  26. data: {
  27. name : "张三",
  28. age: 20
  29. },
  30. created() {
  31. // 插槽传值, 父组件数据更新后,子组件会同步更新
  32. setTimeout(() => {
  33. this.name = "李四",
  34. this.age = 30
  35. }, 1000);
  36. },
  37. })
  38. </script>
  39. </body>