vue.js
  • vuejs2
  • 2017-10-15 105 views 4 likes 
    4

    Condider下面的代码片断:防止从Vue公司重用aggresively DOM元素

     <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标签?

    +0

    添加'key'属性对你'device'元素,具有一些独特的价值,比如'键=“桌面“'和'key =”mobile“'。这将告诉Vue不要重复使用这些元素。 –

    +0

    @JosephSilber:woeha,似乎已经解决了它!如果你喜欢把它记下来,我很乐意接受。 –

    回答

    2

    在这种情况下,Vue使用特殊的key属性,告诉它不要重复使用相同的元素。给每个元件都具有独特的价值这个属性,而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> 
    
    相关问题