1、项目中相关联的实际问题
项目中需要实现一个类型微信朋友圈中,内容过多,有一个收起和展开的功能。当然在原生中,直接计算一下内容的具体高度,然后设置一个阈值,内容的高度超过这个阈值,超出部分隐藏掉,在下方显示一个收起和展开的按钮,点击这个按钮,显示和隐藏超出部分内容。
整体来说,实现起来并不复杂,核心就是获取显示全部内容需要的具体高度。在vue中,实现原理是类似的,通过document.getElementById方法获取对应的元素,然后通过offsetHeight得到对应的高度。
2、遇到的问题
通过mounted钩子函数,通过Vue提供的nextTick方法,获取对应的高度。通过调试,得到的高度始终为0,并不是内容实际所占用的高度。
3、解决
通过Vue官方Forum,搜索v-html指令相关问题,找到一个与自己遇到问题相关的问题。具体解决方案,就是因为rawHtml是通过异步网络请求获取的,所有在mounted的nextTick方法中,去获取对应的元素时,rawHtml并没有已经赋值给v-html(也就是innerHtml)并渲染到页面中。所以我们需要用一个监听,也就是watch,当监听到这个rawHtml有值时,再用nextTick保证rawHtml已经渲染时,再去获取元素以及对应的高度。