提交 ccfb7f5a 编写于 作者: D DCloud_LXH

feat: rich-text support itemclick event

上级 abf1d95c
......@@ -32,13 +32,22 @@ export default {
},
methods: {
_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) {
return
}
if (typeof nodes === 'string') {
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)
const content = this.$refs.content
content.innerHTML = ''
......@@ -46,6 +55,9 @@ export default {
},
_updateView () {
window.dispatchEvent(new CustomEvent('updateview'))
},
triggerItemClick (e, detail = {}) {
this.$trigger('itemclick', e, detail)
}
}
}
......
......@@ -102,13 +102,7 @@ function normlizeValue (tagName, name, value) {
return value
}
export default function parseNodes (nodes, parentNode, $vm) {
let scopeId = ''
while ($vm) {
!scopeId && (scopeId = $vm.$options._scopeId)
$vm = $vm.$parent
}
export default function parseNodes (nodes, parentNode, scopeId, triggerItemClick) {
nodes.forEach(function (node) {
if (!isPlainObject(node)) {
return
......@@ -146,9 +140,11 @@ export default function parseNodes (nodes, parentNode, $vm) {
})
}
processClickEvent(node, elem, triggerItemClick)
const children = node.children
if (Array.isArray(children) && children.length) {
parseNodes(node.children, elem)
parseNodes(node.children, elem, scopeId, triggerItemClick)
}
parentNode.appendChild(elem)
......@@ -160,3 +156,13 @@ export default function parseNodes (nodes, parentNode, $vm) {
})
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.
先完成此消息的编辑!
想要评论请 注册