nested-vms.html 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <style type="text/css">
  2. div:not(#grandpa) {
  3. padding-left: 15px;
  4. }
  5. p {
  6. position: relative;
  7. }
  8. p:not(.ancestor):before {
  9. position: absolute;
  10. top: 0;
  11. left: -22px;
  12. content: "└ ";
  13. color: #F00;
  14. }
  15. </style>
  16. <div id="grandpa" data-name="Andy" data-family="Johnson">
  17. <p class="ancestor">{{name}} {{family}}</p>
  18. <div v-component="man" data-name="Jack">
  19. <p class="jack">{{name}}, son of {{$parent.name}}</p>
  20. <div v-component="man" data-name="Mike">
  21. <p class="mike">{{name}}, son of {{$parent.name}}</p>
  22. <div v-component="offspring" data-name="Tim" class="tim">
  23. </div>
  24. <div v-component="offspring" data-name="Tom" class="tom">
  25. </div>
  26. </div>
  27. <div v-component="man" data-name="Jason">
  28. <p class="jason">{{name}}, son of {{$parent.name}}</p>
  29. <div v-component="offspring" data-name="Andrew" class="andrew">
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <script type="text/v-template" id="v-template-offspring">
  35. <p>{{name}}, son of {{$parent.name}}, grandson of {{$parent.$parent.name}}, great-grandson of {{$root.name}}, and offspring of family {{family}}.</p>
  36. </script>
  37. <script src="../../../dist/vue.js"></script>
  38. <script>
  39. Vue.config({ debug: true })
  40. var Man = Vue.extend({
  41. created: function () {
  42. this.name = this.$el.dataset.name
  43. console.log(this.$el)
  44. console.log(this.name)
  45. var family = this.$el.dataset.family
  46. if (family) {
  47. this.family = family
  48. }
  49. }
  50. })
  51. var Offspring = Man.extend({
  52. template: document.getElementById('v-template-offspring').innerHTML.trim()
  53. })
  54. Vue
  55. .component('man', Man)
  56. .component('offspring', Offspring)
  57. new Man({
  58. el: '#grandpa'
  59. })
  60. </script>