如何将PHP变量传递给Laravel刀片中的Vue组件实例?

mas*_*f85 24 php laravel vue.js vuejs2

如何将一个PHP变量的值传递给Laravel刀片文件中的Vue组件?

在我的示例中,我有一个内联模板客户端详细信息,我从这里获得此视图Laravel现在我想id将url附带的内容传递/client/1给我的Vue实例.

我的组件,加载Laravel,看起来像:

<client-details inline-template>
    <div id="client-details" class="">
          My HTML stuff
    </div>
</client-details>
Run Code Online (Sandbox Code Playgroud)

并安装:

Vue.component('client-details', {
    data(){
        return {
            clientId: null
        }
    },
);
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了

:clientId="{{ $client->id }"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Mus*_*zay 31

您必须使用Vue props才能通过标记将属性传递给Vue的组件.看一下下面的例子:

<client-details inline-template client-id="{{ $client->id }}">
    <div id="client-details" class="">
          My HTML stuff
    </div>
</client-details>
Run Code Online (Sandbox Code Playgroud)

在你的Vue组件中:

Vue.component('client-details', {
    props: [
        {
            name: 'clientId',
            default:0,
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

现在,在Vue组件的其他部分中,您可以访问此值this.clientId.

问题详情

请注意,在HTML中我们在kebab-case中编写属性名称,但在Vue中我们在camelCase中编写它.更多关于官方文档的信息.

此外,您正在使用Vue的v-bind简写,:clientId="{{ $client->id }}"这意味着Vue将双引号内的任何内容作为JavaScript表达式处理,因此在这种情况下您也可能会遇到错误.相反,您应该使用此格式clientId="{{ $client->id }}而不使用冒号.

  • 为什么这个 `client-id="{{ $client-&gt;id }}"` 而不是 `clientId="{{ $client-&gt;id }}"`。我在任何地方都没有看到“client-id”。只是“clientId” (2认同)

Haw*_*e64 11

我刚刚做了这个,它对我很有用.使用Laravel 5.4和Vue 2.x.

在我的组件中,声明对象的属性(props):

props: ['currentUser'],

在我的刀片页面上,组件被实例化:

<my-component v-bind:current-user='{!! Auth::user()->toJson() !!}'></my-component>

请注意,在组件中,我使用的是camelCase currentUser,但由于html不区分大小写,因此必须使用kebab-case(因此,'current-user').

另请注意,如果您使用刀片语法,{{ }}则之间的数据通过php运行htmlspecialchars.如果你想要未编码的数据(在这种情况下你可以),那么使用{!! !!}


Jon*_*tle 6

对于遇到此线程但仍然出现错误的任何人,Mustafa Ehsan 在上面给出了正确的答案,但没有解释。反复试验帮助我看到了它。

我在 newuser.blade.php 中的组件

<access-request
       firstname="{{ $newuser->firstname }}"
       lastname="{{ $newuser->lastname }}"
       accessid="{{ $newuser->id }}"
>
</access-request>
Run Code Online (Sandbox Code Playgroud)

注意使用的绑定方法非常重要。在上面的组件上,我只写了数据绑定的名称(如 React props),然后将其注册到组件 props 上(见下文)。这就是穆斯塔法在他的回答中写他的绑定的方式,并且工作正常。另一种 Vue 传递 props 的方式是使用 v-bind: 或 :,但你必须确保同时使用双引号和单引号:

:firstname="'{{ $newuser->firstname }}'"
Run Code Online (Sandbox Code Playgroud)

如果没有两个引号,您会收到 Vue 警告。

访问请求.vue:

<template>
   <div class="component">
        <h3 class="">{{ firstname }} {{ lastname }}</h3>
        <p>Access ID: {{ accessid }}</p>
        <label for="administrator">Grant Administrator Priviledges:</label>
        <input name="administrator" type="checkbox" value="True" class="mb-5"><br>
        <button type="submit" class="btn btn-success">Add</button>
        <button type="submit" class="btn btn-danger">Delete</button>
        <hr>
   </div>
</template>

<script>
  export default {
    name: "AccessRequest",
    props: ['firstname', 'lastname', 'accessid'],
  }
</script>
Run Code Online (Sandbox Code Playgroud)