如何将布尔值从 Blade 传递到 Vue 组件 Laravel 7?

Dal*_*ngh 2 php laravel vue.js laravel-7

我正在尝试IF在 Vue 组件中使用 true/false 或 1/0实现条件。我经历了一些早先提出的问题,但无法得到它。请帮帮我。

IFtrue即使dd给出 ,条件也不给出输出true

控制器(我尝试了两种方法,以便我可以通过 true/false 或 1/0 获得成功,在页面上的两种方法中,我都可以使用 dd($isExamAssigned) 获得 1/0 或 true/false):

    dd($isExamAssigned); // here I'm able to get 1 or 0
Run Code Online (Sandbox Code Playgroud)

刀片.php:

    <quiz-component
   
   :isExamAssigned = "{{$isExamAssigned}}"
   >
</quiz-component>
Run Code Online (Sandbox Code Playgroud)

Component.vue 的代码部分:

props:['isExamAssigned'],

data(){

    return{

            isExamAssigned :this.isExamAssigned,

        }
Run Code Online (Sandbox Code Playgroud)

这是 IF 条件:

<div v-if="isExamAssigned === '1'">

                        <!-- Code here for IF -->

                    </div>


                    <div v-else>

                        <!-- Code here for ELSE -->

                    </div>
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法来获取值,例如:

<div v-if="isExamAssigned === 1">

<div v-if="isExamAssigned === true">

<div v-if="isExamAssigned">
Run Code Online (Sandbox Code Playgroud)

我无法执行条件

谢谢。

Mic*_*icB 9

Himanshu的答案是正确的,也可以写成这样:

:isExamAssigned='@json($isExamAssigned)'


小智 6

尝试在您的blade.php 文件中传递这样的道具

:isExamAssigned="{{ json_encode($isExamAssigned) }}"
Run Code Online (Sandbox Code Playgroud)

这将以布尔格式发送道具。

  • 如果其他人遇到这个问题,请注意@Himanshu Sharma 的答案中“v-bind”(“:attr-name”中的冒号)的简写。如果你忽略它,Vue 将不知道将 `"false"` 解释为表达式而不是字符串。IE。你在 vue props 中得到的是 `"false"` 而不是 `false`。谢谢@Himanshu Sharma!这让我发疯。 (2认同)

mrh*_*rhn 5

您将其设置为'1'vue 组件中的字符串值。稍后你再将它与整数、布尔值和布尔值进行严格比较。最正确的方法是将其设置为真正的布尔值,如下所示。你的第二种方法会起作用。

$isExamAssigned = DB::table('quiz_user')->where('user_id', $authUser)->where('quiz_id', $quizId)->exists();
Run Code Online (Sandbox Code Playgroud)

现在 PHP 类型很奇怪,如果你打印出来,$isExamAssigned它会打印出 1。你可以尝试一下{{true}},自己看看结果。为了避免这种情况,请在设置组件时在刀片文件中执行以下检查。

:isExamAssigned = "{{$isExamAssigned ? 'true' : 'false'}}"
Run Code Online (Sandbox Code Playgroud)

这将使以下 if 语句起作用。

<div v-if="isExamAssigned === true">

<div v-if="isExamAssigned">
Run Code Online (Sandbox Code Playgroud)