wxParseTemplate0.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <!--判断是否是标签节点-->
  3. <block v-if="node.node === 'element'">
  4. <!--button类型-->
  5. <button v-if="node.tag === 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
  6. <we-parse-template-1 :node="node" />
  7. </button>
  8. <!--a类型-->
  9. <view v-else-if="node.tag === 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  10. <block v-for="(item, index) of node.nodes" :key="index">
  11. <we-parse-template-1 :node="item" :parent-node="node"/>
  12. </block>
  13. </view>
  14. <!--div类型-->
  15. <view v-else-if="node.tag === 'div'" :class="node.classStr" :style="node.styleStr">
  16. <block v-for="(item, index) of node.nodes" :key="index">
  17. <we-parse-template-1 :node="item" :parent-node="node"/>
  18. </block>
  19. </view>
  20. <!--span类型-->
  21. <view v-else-if="node.tag === 'span'" :class="node.classStr" :style="node.styleStr">
  22. <block v-for="(item, index) of node.nodes" :key="index">
  23. <we-parse-template-1 :node="item" :parent-node="node"/>
  24. </block>
  25. </view>
  26. <!--p类型-->
  27. <view v-else-if="node.tag === 'p'" :class="node.classStr" :style="node.styleStr">
  28. <block v-for="(item, index) of node.nodes" :key="index">
  29. <we-parse-template-1 :node="item" :parent-node="node"/>
  30. </block>
  31. </view>
  32. <!--ul类型-->
  33. <view v-else-if="node.tag === 'ul'" :class="node.classStr" :style="node.styleStr">
  34. <block v-for="(item, index) of node.nodes" :key="index">
  35. <we-parse-template-1 :node="item" :parent-node="node"/>
  36. </block>
  37. </view>
  38. <!--li类型-->
  39. <view v-else-if="node.tag === 'li'" :class="node.classStr" :style="node.styleStr">
  40. <block v-for="(item, index) of node.nodes" :key="index">
  41. <we-parse-template-1 :node="item" :parent-node="node"/>
  42. </block>
  43. </view>
  44. <!--table类型-->
  45. <wx-parse-table v-else-if="node.tag === 'table'" :style="node.styleStr" :node="node" />
  46. <!--br类型-->
  47. <text v-else-if="node.tag === 'br'">\n</text>
  48. <!--video类型-->
  49. <wx-parse-video :node="node" v-else-if="node.tag === 'video'"/>
  50. <!--audio类型-->
  51. <wx-parse-audio :node="node" v-else-if="node.tag === 'audio'"/>
  52. <!--img类型-->
  53. <wx-parse-img :parent-node="parentNode" :node="node" v-else-if="node.tag === 'img'" :style="node.styleStr"/>
  54. <!-- strong标签 -->
  55. <view v-else-if="node.tag === 'strong'" style="font-weight: bold;display: inline;">
  56. <block v-for="(item, index) of node.nodes" :key="index">
  57. <we-parse-template-1 :node="item" :parent-node="node"/>
  58. </block>
  59. </view>
  60. <!-- em标签 -->
  61. <view v-else-if="node.tag === 'em'" style="font-style: italic">
  62. <block v-for="(node, index) of node.nodes" :key="index">
  63. <we-parse-template-1 :node="node" />
  64. </block>
  65. </view>
  66. <!-- section标签 -->
  67. <view v-else-if="node.tag === 'section'" >
  68. <block v-for="(node, index) of node.nodes" :key="index">
  69. <we-parse-template-1 :node="node" />
  70. </block>
  71. </view>
  72. <!--其他标签-->
  73. <view v-else :class="node.classStr" :style="node.styleStr">
  74. <block v-for="(item, index) of node.nodes" :key="index">
  75. <we-parse-template-1 :node="item" :parent-node="node"/>
  76. </block>
  77. </view>
  78. </block>
  79. <!--判断是否是文本节点-->
  80. <block v-else-if="node.node === 'text'">
  81. <text>{{node.text}}</text>
  82. </block>
  83. </template>
  84. <script>
  85. import wxParseTemplate from './wxParseTemplate1';
  86. import wxParseImg from './wxParseImg';
  87. import wxParseVideo from './wxParseVideo';
  88. import wxParseAudio from './wxParseAudio';
  89. import wxParseTable from './wxParseTable';
  90. export default {
  91. name: 'wxParseTemplate0',
  92. props: {
  93. node: {
  94. type: Object,
  95. default() {
  96. return {}
  97. }
  98. },
  99. parentNode: {}
  100. },
  101. components: {
  102. 'we-parse-template-1': wxParseTemplate,
  103. wxParseImg,
  104. wxParseVideo,
  105. wxParseAudio,
  106. wxParseTable
  107. },
  108. methods: {
  109. wxParseATap(attr,e) {
  110. const {
  111. href
  112. } = e.currentTarget.dataset;// TODO currentTarget才有dataset
  113. if (!href) return;
  114. let parent = this.$parent;
  115. while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
  116. parent = parent.$parent;
  117. }
  118. parent.navigate(href, e, attr);
  119. },
  120. }
  121. };
  122. </script>