【问题标题】:Element in VueJS template reference selfVueJS 模板中的元素引用 self
【发布时间】:2020-03-23 07:10:54
【问题描述】:

我有一个组件,其中包含许多 div 元素,只有一个在点击时具有“活动”类。如果变量“activeSlide”等于元素,我正在尝试绑定“活动”类。

v-bind:class="{ 'active': activeSlide === ?? }"

我只是不确定?? 应该是什么。我还没有找到任何可以说明元素如何引用自身的东西。或者也许有更好的方法?

.vue 组件文件中的我的代码:

<template>
  <div v-on:click="show" v-bind:class="{ 'active': activeSlide === ?? }"></div>
</template>

<script>
  export default {
    data() {
        return {
            activeSlide: null
        }
    }
    methods: {
       show: function(e) {
           this.activeSlide = e.target;
       }
    } 
}
</script>

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    我假设?? 旨在成为唯一标识活动元素的东西。

    <template>
      <div v-on:click="show('Slide1')" v-bind:class="{ 'active': activeSlide === 'Slide1' }"></div>
    
      <div v-on:click="show('Slide2')" v-bind:class="{ 'active': activeSlide === 'Slide2' }"></div>
    </template>
    
    <script>
      export default {
        data() {
            return {
                activeSlide: null
            }
        }
        methods: {
           show: function(value) {
               this.activeSlide = value;
           }
        } 
    }
    </script>
    

    所以基本上当您单击幻灯片时,它会将activeSlide 属性更改为传递给v-on:click 方法的值。

    有更多动态的方法可以做到这一点,例如,如果您要遍历一系列元素,然后您可以将活动索引与元素的索引进行比较,而不是明确地说 Slide1Slide2

    这是一个动态的例子

    <template>
      <div v-for="slide in slides" :key="slide.id" v-on:click="show(slide.id)" v-bind:class="{ 'active': activeSlide === slide.id }"></div>
    </template>
    
    <script>
      export default {
        data() {
            return {
                activeSlide: null
            }
        }
        methods: {
           show: function(value) {
               this.activeSlide = value;
           }
        } 
    }
    </script>
    

    因此您可以使用迭代中的任何可用数据进行比较,只需将slide.whatever 传递给方法并将类设置为相同的东西。

    【讨论】:

    • 这将是一种方法。它将是动态的,因为幻灯片将从数组中填充。但是,幻灯片的索引可能会发生变化。如果用户在视图中移动幻灯片,它将更新数组,这就是为什么我想看看是否可以引用元素本身。因为用户可以在多个演示文稿之间切换,所以此处的标识符需要非常独特,以至于其他幻灯片都没有。
    • @JustinD,如果你遍历一个数组,它不一定是索引。我的意思是我不知道您的数据数组是什么样的,但我会发布一个示例。
    • 不,我明白了。我只是认为它可能比提出一个唯一标识符更简单,我可以在其中引用元素本身。
    • @JustinD,您将无法访问v-bind:class 的元素属性。如果可能的话,我会依靠数据作为唯一标识符。添加了新动态示例的更新。
    • 您的示例将起作用。只是为了澄清,我试图访问元素本身...... $this 或类似的东西。不知道在 Vue 中是否可行。
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 2016-12-24
    • 2018-04-05
    • 1970-01-01
    • 2019-07-13
    • 2023-04-03
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多