vue.js - 在 v-if 中使用方法函数

标签 vue.js vuejs2

我正在尝试在 v-if 指令中使用函数,就像在 vue 模板中那样

    <template>

    <ul class="list-group">
        <li class="list-group-item list-group-item-info">
            <div class="row">
                <div v-for="col in colss" class="" :class="bootstrapClass">{{col | capitalize}}</div>
            </div>
        </li>

        <li v-for="item in datas[collectionsindatas['reference']]" class="list-group-item">
            <div class="row">
                <div v-for="property in columns.slice(0,(columns.length))" class="" :class="bootstrapClass">{{ item[property] }}</div>

                <div v-if="compareCollections(item[comparecol],datas[collectionsindatas['compare'][comparecol]])" class="" :class="bootstrapClass">
                    OK
                </div>
                <div v-else class="" :class="bootstrapClass">!!NOK!!</div>

            </div>

        </li>
    </ul>

</template>

我的方法是这样的:

methods:{
compareCollections:function(reference,compare){
                if(compare!='undefined'  && compare!=''){
                    if(compare===reference){
                        return true;
                    }
                    return false;
                }
                return false;
            },
}

失败并显示此消息:[Vue warn]: 属性或方法未在实例上定义但在渲染期间被引用

我觉得使用一个方法比在 v-if 指令中写很多丑陋的东西更好,比如

v-if="datas[collectionsindatas['compare'][comparecol]]!='undefined'&&(item[comparecol]===datas[collectionsindatas['compare'][comparecol]])"

这样做的正确方法是什么?

谢谢你的帮助

最佳答案

为了在您的 v-if 中摆脱这种比较,我将使用一个组件和您的参数。在组件中,您可以计算值并使用 computed 提供它们。您不必将任何参数传递给 computed,因为它们已经是组件的参数:

<template>
  <div>
    <div v-if="compEqRef" class="" :class="bootstrapClass">
      OK
    </div>
    <div v-else class="" :class="bootstrapClass">!!NOK!!</div>
  </div>
</template>

<script>
  export default {

    methods: {
      compareCollections(reference, compare) {
        return (compare !== 'undefined' && compare !== '' && compare === reference);
      }
    },

    computed: {
      compEqRef() {
        const left = this.item[this.comparecol];
        const right = this.datas[this.collectionsindatas['compare'][this.comparecol]];

        return this.compareCollections(left, right);
      }
    },

    props: {
      item: {
        required: true
      },
      datas: {
        required: true
      },
      comparecol: {
        required: true
      },
      collectionsindatas: {
        required: true
      }
    }
  }
</script>

关于vue.js - 在 v-if 中使用方法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479666/

相关文章:

vuejs2 - 如何在作用域槽中包含 v-for 的输入?

javascript - 从 axios 返回数据而不是 promise

javascript - vue/vuetify 动态修改 v-text-field 属性

javascript - 在这里 map ,我如何添加一个新的用户界面按钮?

javascript - 将 VueJS 连接到 RabbitMQ

javascript - Vue.js 如何上传图像并在之后运行自定义方法

javascript - 在 v-for 列表项中显示和隐藏 div (Vue.js 2)

javascript - Vuex 中的 Action 完成后从商店调用组件函数

typescript - vue-class-component mixins 在 WebStorm 中引发错误?

vue.js - 嵌套路由器 View 转换问题