当前位置:   article > 正文

vue.js(5):组件component嵌套关系_component 嵌套不同的组件

component 嵌套不同的组件

1.嵌套关系

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. <script>
  8. window.onload = function(){
  9. new Vue({
  10. el:"#root",
  11. components:{
  12. 'my-tr':{
  13. template:"#myTr"
  14. }
  15. }
  16. })
  17. }
  18. </script>
  19. <template id="myTr">
  20. <tr>
  21. <td>博主好帅</td>
  22. <td>博主非常帅</td>
  23. </tr>
  24. </template>
  25. </head>
  26. <body>
  27. <div id="root">
  28. <!--高级用法-->
  29. <!--嵌套关系-->
  30. <table border="1">
  31. <tr is="my-tr"></tr>
  32. </table>
  33. </div>
  34. </body>
  35. </html>

 

2.插槽

插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. <script>
  8. window.onload = function(){
  9. //方式三
  10. new Vue({
  11. el:"#root",
  12. components:{
  13. 'my-slot':{
  14. template:"#mySlot"
  15. }
  16. }
  17. })
  18. }
  19. </script>
  20. <template id="mySlot">
  21. <div>
  22. <p>博主长得怎么样</p>
  23. <slot name="s1"></slot>
  24. <p>博主气质如何</p>
  25. <slot name="s2"></slot>
  26. </div>
  27. </template>
  28. </head>
  29. <body>
  30. <div id="root">
  31. <!--插槽-->
  32. <my-slot>
  33. <ul slot="s1">
  34. <li>博主非常帅</li>
  35. </ul>
  36. <ul slot="s2">
  37. <li>博主气质无与伦比</li>
  38. </ul>
  39. </my-slot>
  40. </div>
  41. </body>
  42. </html>

 

3.动态组件

当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. <script>
  8. window.onload = function(){
  9. new Vue({
  10. el:"#root",
  11. data:{
  12. flag:'my-address2'
  13. },
  14. components:{
  15. //方式三
  16. 'my-address':{
  17. template:'<h3>my-address</h3>'
  18. },
  19. //方式四
  20. 'my-address2':{
  21. template: "#myAddress2",
  22. data: function(){
  23. return{
  24. title: "title",
  25. list: [1,2,3,4]
  26. }
  27. }
  28. }
  29. }
  30. })
  31. }
  32. </script>
  33. <template id="myAddress2">
  34. <div>
  35. <p>{{title}}</p>
  36. <ul>
  37. <li v-for="(v,i) in list">{{v}}</li>
  38. </ul>
  39. </div>
  40. </template>
  41. </head>
  42. <body>
  43. <div id="root">
  44. <!--动态组件-->
  45. <!--:is data变量-->
  46. <button @click="flag='my-address2'">my-address2</button>
  47. <button @click="flag='my-address'">my-address</button>
  48. <component :is="flag"></component>
  49. </div>
  50. </body>
  51. </html>

 

4.状态管理

<keep-alive>是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. <script>
  8. window.onload = function(){
  9. new Vue({
  10. el:"#root",
  11. data:{
  12. changeflag:'my-change1'
  13. },
  14. components:{
  15. 'my-change1':{
  16. template:'<h1>{{x}}</h1>',
  17. data:function(){
  18. return {
  19. x:Math.random()
  20. }
  21. }
  22. },
  23. 'my-change2':{
  24. template:'<h2>{{x}}</h2>',
  25. data:function(){
  26. return {
  27. x:Math.random()
  28. }
  29. }
  30. }
  31. }
  32. })
  33. }
  34. </script>
  35. </head>
  36. <body>
  37. <div id="root">
  38. <!--状态管理-->
  39. <button @click="changeflag='my-change2'">my-change2</button>
  40. <button @click="changeflag='my-change1'">my-change1</button>
  41. <keep-alive>
  42. <component :is="changeflag"></component>
  43. </keep-alive>
  44. </div>
  45. </body>
  46. </html>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/82685
推荐阅读
  

闽ICP备14008679号