代码如下,指令v-preview可以正常调用了 但是el-image却无法调出来,出不来正常的效果,寻大神指点
html调用指令
<div class="wb_add_img clearfix">
<a v-for="(pic, index) in picList" :key="index" v-preview="{srcList: srcList}" class="imgWrap">
<img alt="图片" :src="pic.fileid" class="img"/>
</a>
</div>
index.js
import preview from './children/preview'
Vue.directive('preview', {
bind(el, binding, vnode) {
const srcList = (binding.value && binding.value.srcList) || []
el.addEventListener('click', () => {
const $preview = new (Vue.extend(preview))({
propsData: {
srcList: srcList
}
}).$mount()
document.body.appendChild($preview.$el)
})
}
})
preview.js
<template>
<div class="perImage">
<el-image
style="width: 100px; height: 100px"
ref="preview"
class="wqewe"
:src="url"
:preview-src-list="srcList"
</el-image>
</div>
</template>
<script>
export default {
props: {
srcList: [Array, String],
},
data() {
return {
url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
// picList: [
// 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
// 'https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg'
// ]
}
},
created() {
this.init()
},
methods: {
init() {
this.$nextTick(() => {
this.showImgPreview()
})
},
showImgPreview() {
console.log('url', this.url)
console.log('srcList', this.srcList)
},
},
computed: {
// 处理预览图片数据
// previewSrc() {
// return this.srcList
// }
},
}
</script>
<style lang="scss" scoped>
.preview-container {
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.8);
}
.preview-container img {
max-width: 80%;
max-height: 80%;
}
</style>
v-preview="{srcList: srcList}"
里面的srcList
是否组件创建时还是个空数组,创建之后通过请求拿到的数据我看你的指令没有
watch
这个数据,所以你这个指令好像只能渲染出来一个传入空数组的el-image
,不知道是不是这个原因试了下你的代码,发现了几个报错
preview
指令应该触发了关键字,可以考虑换个名字还有下一段代码不对呀
这样改完我这边是生效了
参考代码
demo.vue