【问题标题】:set v-show to true or false with a function使用函数将 v-show 设置为 true 或 false
【发布时间】:2016-03-16 13:20:46
【问题描述】:

我有一个使用 Vue 渲染的属性列表(房屋、公寓……)。

每个属性的显示或不显示取决于某些类似于过滤器的按钮。这些“过滤器”设置在我的数据对象中:

data: {
    properties: myPropertiesList,
    rooms: {
        1: false,
        2: false,
        3: false,
        4: false,
    },
    type: {
        flat: false,
        house: false,
        field: false
    }
},

当用户点击选项按钮时,我将这些选项设置为 true 或 false。

目前,我用当前表达式设置 v-show:

v-show="rooms[property.Rooms] && type[property.Category]"

<div v-show="rooms[property.Rooms] && type[property.Category]" 
        class="col-md-3" 
        v-for="property in properties"
    >
        <property :property="property"> 
</div>

...而且效果很好。但是,我宁愿做这样的事情:

v-show="showProperty(property)"

... 并编写返回 true 或 false 的 showProperty() 函数。

  1. 这样的事情可能吗?
  2. 如果是,你在哪里声明函数?我在方法对象中尝试过,但它不起作用。

【问题讨论】:

  • 从未使用过 Vue,但您可以在数据对象上定义一个方法,传入 property.Rooms 和 property.Category,这将返回一个布尔值。如果你不能这样做,你可以在数据对象外部编写一个函数,传入对象、property.Rooms 和 property.Category,这也会根据你上面的逻辑返回一个布尔值。

标签: javascript vue.js


【解决方案1】:

Jeff 建议的过滤器的使用是可行的方法,但我想回答您的直接问题,这是否可能具有功能,因为它是。

您只需将函数添加到组件方法对象中:

methods: {
  showProperty (property) {
    return this.rooms[property.Rooms] && this.type[property.Category]
  }
}

【讨论】:

    【解决方案2】:

    这看起来像是对v-for过滤的调用:

    ...
    data:function(){
        properties:MyPropertyList,
        rooms: [1,2,3,4],
        types: ['flat','house','field']
    },
    ...
    
    <div v-for="property in properties | filterBy Room in rooms | filterBy Category in types" 
        class="col-md-3"
    >
        <property :property="property"> 
    </div>
    

    仅当property.Roomrooms 数组中,并且property.Categorytypes 数组中时才会显示属性。

    如果您像现在一样需要对象中的房间和类型,您可以使用计算属性来创建用于过滤的数组。

    computed:{
      roomList:function(){
        //go through the rooms object and return an array of the true ones
      }
    }
    

    如果您想使用自定义函数进行过滤,您可以:

    <div v-for="property in properties | filterBy showPropertyFilter rooms type">
    

    在这一切之前,创建过滤器:

    Vue.filter('showPropertyFilter',function(properties, rooms, type){
        //return only the properties that should show
    });
    

    【讨论】:

    • 问题是我不能使用filterBy,我想我被这个功能限制了。我需要一种更复杂的方法来决定是否显示属性元素。所以我的想法是将 v-show 与函数一起使用,并根据该函数中的一些条件的结果返回 true 或 false。
    • 您也可以将 filterBy 与自定义函数一起使用,请参阅编辑。
    • 这是一篇关于创建自定义过滤器的更深入的帖子optimizely.github.io/vuejs.org/guide/filters.html
    猜你喜欢
    • 2020-09-04
    • 2012-01-09
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多