vue.js – 阻止Vue集体重用dom元素

前端之家收集整理的这篇文章主要介绍了vue.js – 阻止Vue集体重用dom元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Condider以下代码段:
<template v-if="tryIsMobile" >
          <div class='device device-mobile-portrait' :class="deviceClass">
            <div class="device-scroller-container">
              <div class='device-scroller'>
                <img id='tryit-img-mobile' :src="srcUrlMobile" v-on:load="onImgLoad" v-on:error="onImgError"/>
              </div>
            </div>
          </div>
        </template>

        <template v-else>
          <div class='device device-tablet-landscape' :class="deviceClass" >
            <div class="device-scroller-container">
              <div class='device-scroller'>
                <img  id='tryit-img-tablet' :src="srcUrlTablet" v-on:load="onImgLoad" v-on:error="onImgError"/>
              </div>
            </div>
          </div>
        </template>

代码有条件地呈现两个图像中的一个.某些用户操作会导致实际显示的图像被切换.

我所看到的是以下内容:当从tryit-img-mobile切换到tryit-img-tablet时,作为tryit-img-mobile的一部分加载的图像将立即显示不同的尺寸.但是,在图像加载它的新源时:src =“srcUrlTablet”,仍然显示带有src:src =“srcUrlMobile”的图像.

这可能是由于Vue对两个模板使用相同的img-tag.如何防止Vue这样做,而是使用单独的img-tags?

解决方法

在这种情况下,Vue使用一个特殊的键属性来告诉它不要重用相同的元素.为每个元素赋予此属性一个唯一值,Vue将不再重用相同的元素:
<div v-if="tryIsMobile"
     class="device device-mobile-portrait"
     :class="deviceClass"
     key="mobile"
>
    ...
</div>
<div v-else
     class="device device-tablet-landscape"
     :class="deviceClass"
     key="tablet"
>
    ...
</div>

猜你在找的JavaScript相关文章