提交 ccfb7f5a 编写于 作者: D DCloud_LXH

feat: rich-text support itemclick event

上级 abf1d95c
...@@ -32,13 +32,22 @@ export default { ...@@ -32,13 +32,22 @@ export default {
}, },
methods: { methods: {
_renderNodes (nodes) { _renderNodes (nodes) {
let scopeId = ''
let $vm = this
while ($vm) {
!scopeId && (scopeId = $vm.$options._scopeId)
$vm = $vm.$parent
}
const hasItemClick = !!this.$listeners.itemclick
if (!this._isMounted) { if (!this._isMounted) {
return return
} }
if (typeof nodes === 'string') { if (typeof nodes === 'string') {
nodes = parseHtml(nodes) nodes = parseHtml(nodes)
} }
const nodeList = parseNodes(nodes, document.createDocumentFragment(), this) const nodeList = parseNodes(nodes, document.createDocumentFragment(), scopeId, hasItemClick && this.triggerItemClick)
nodeList.appendChild(this.$refs.sensor.$el) nodeList.appendChild(this.$refs.sensor.$el)
const content = this.$refs.content const content = this.$refs.content
content.innerHTML = '' content.innerHTML = ''
...@@ -46,6 +55,9 @@ export default { ...@@ -46,6 +55,9 @@ export default {
}, },
_updateView () { _updateView () {
window.dispatchEvent(new CustomEvent('updateview')) window.dispatchEvent(new CustomEvent('updateview'))
},
triggerItemClick (e, detail = {}) {
this.$trigger('itemclick', e, detail)
} }
} }
} }
......
...@@ -102,13 +102,7 @@ function normlizeValue (tagName, name, value) { ...@@ -102,13 +102,7 @@ function normlizeValue (tagName, name, value) {
return value return value
} }
export default function parseNodes (nodes, parentNode, $vm) { export default function parseNodes (nodes, parentNode, scopeId, triggerItemClick) {
let scopeId = ''
while ($vm) {
!scopeId && (scopeId = $vm.$options._scopeId)
$vm = $vm.$parent
}
nodes.forEach(function (node) { nodes.forEach(function (node) {
if (!isPlainObject(node)) { if (!isPlainObject(node)) {
return return
...@@ -146,9 +140,11 @@ export default function parseNodes (nodes, parentNode, $vm) { ...@@ -146,9 +140,11 @@ export default function parseNodes (nodes, parentNode, $vm) {
}) })
} }
processClickEvent(node, elem, triggerItemClick)
const children = node.children const children = node.children
if (Array.isArray(children) && children.length) { if (Array.isArray(children) && children.length) {
parseNodes(node.children, elem) parseNodes(node.children, elem, scopeId, triggerItemClick)
} }
parentNode.appendChild(elem) parentNode.appendChild(elem)
...@@ -160,3 +156,13 @@ export default function parseNodes (nodes, parentNode, $vm) { ...@@ -160,3 +156,13 @@ export default function parseNodes (nodes, parentNode, $vm) {
}) })
return parentNode return parentNode
} }
function processClickEvent (node, elem, triggerItemClick) {
if (['a', 'img'].includes(node.name) && triggerItemClick) {
elem.setAttribute('onClick', 'return false;')
elem.addEventListener('click', (e) => {
triggerItemClick(e, { node })
e.stopPropagation()
}, true)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册