【问题标题】:Vue.js: Conditional rendering based on computed propertyVue.js:基于计算属性的条件渲染
【发布时间】:2020-03-09 14:30:08
【问题描述】:

我正在尝试基于计算属性有条件地渲染元素,但即使我的计算属性正确返回 truefalse 也没有太多运气。

我将用户对象作为属性(来自 Laravel)传递,一切正常。我能够看到用户——以及他们的相关角色。

我已经通过 Laravel 进行了测试,以确保我发送了正确的用户和关系,并且那里的一切看起来都很好。

控制器

$user = User::with('roles')->find(Auth::id());

刀片

<my-component :user="{{ $user }}"></my-component>

VueComponent.vue

<template>
    <div>
        <div v-if="admin">
            <p>You are an admin!</p>
        </div>
        <div v-else>
            <p>You are not an admin.</p>
        </div>
    </div>
</template>



<script>
export default {

    ...

    computed: {
        admin: function () {
            this.user.roles.forEach((role) => {
                console.log('role: ', role);  // role: admin (string)
                if (role.name === 'admin') {
                    console.log('user is an admin!');  // I am getting here.
                    return true;
                } else {
                    console.log('user is NOT an admin.');
                }
            });

            return false;
        },
    },
    methods: {
        //
    },
    props: {
        user: {
            type: Object,
            required: true,
        },
    },
}
</script>

我确定我没有正确实现计算属性;非常感谢任何帮助!

【问题讨论】:

  • admin 是否嵌套在 computed 对象中?
  • 不,我要从传入组件的 user 对象/属性中访问 admin(用户角色)。

标签: laravel vue.js


【解决方案1】:

您的问题是错误地使用了 foreach!请改用这个:

  computed: {
      admin: function () {
          for (var i = 0; i < this.user.roles.length; i++){
            if ( this.user.roles[i].name === 'admin') {
                    return true;
            }
          }
          return false;
      }
   }

你可以阅读这篇关于forEach in js https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach的文章

您的错误是从 forEach callback 函数返回 true 并让这个 true 值无用,然后在 admin 函数上返回 false 值。

【讨论】:

  • 嗨 Alireza - 我有它(就像你在上面所做的那样)我只是没能在我的问题中正确输入它。我已经更新以更好地展示我所拥有的。很抱歉,感谢您的反馈!
  • 嗨@Damon,我刚刚更新了我的答案,希望能成功!
  • 就是这样;太感谢了!我仍在努力寻找自己做错了什么。我今天的头骨一定很厚。我不应该使用foreach 而是使用“常规”for 循环吗?再次感谢您!
  • @Damon 更新。
猜你喜欢
  • 2017-05-31
  • 2018-11-12
  • 2011-07-17
  • 2018-12-05
  • 2016-02-07
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多