【问题标题】:Vue load component from Laravel viewLaravel 视图中的 Vue 加载组件
【发布时间】:2021-04-26 18:52:37
【问题描述】:

我是 Vue 和 Laravel 的新手,我正在测试这些框架。

我想加载一个带有数组的 Vue 组件。这个想法是通过 Vue 组件的 Prop 参数传递到 Laravel 视图。 我不确定这是正确的方法还是直接从 Vue 组件使用 axios 获取值的更好选择。

目前我正在尝试从数组 Prop 参数加载到组件中。

Vue组件的代码是:

<template>
  <div>
      <b-form-select
        v-model="selected"
        :options="ar"
        class="mb-3"
        value-field="customer_name">
      </b-form-select>     
 </div>
</template>

<script>
  export default {
        props: ['customers'],

        data: function() {
          return {
            ar: JSON.parse(this.customers)
          }
        }
    }
</script>

更新

create.blade.php

@extends('layouts.app')
@section ('botones')
@endsection
@section('content')
    <h2 class="text-center mb-5"> Add Task</h2>
    <div class="row justify-content-center mt-5">      
        <div class="col-md-3">
            <form method="POST" action="{{ route('taskjobs.store') }}" novalidate> 
                @csrf
                <div class="form-group">
                  
                <form-task :customers="json_encode($customers)"></form-task> // interpolation is not necessary
               
                <div class="form-group">
                    <input type="submit" class="btn btn-primary btn-dark" value="Add Task">
    
                </div>
            </form>
        </div>     
    </div>
    
@endsection

TaskJobController.php

   /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $customers = Customer::all(['id', 'customer_name']);
        $jobs= Job::all(['id', 'job_name']);
        $concepts= Concept::all(['id', 'concept_name']);
        return view('taskjobs.create')
        ->with('customers', $customers)
        ->with('jobs', $jobs)
        ->with('concepts', $concepts);
    }

现在表单元素显示空值,但在 ul 中,元素显示为 json 对象。这让我很困惑。

也许有人可以帮助我...谢谢。

【问题讨论】:

    标签: laravel vue.js vue-component


    【解决方案1】:

    我不确定 laravel 视图,但一般来说,如果将 props 传递给 vue 组件,则需要使用绑定运算符 ':' (ie)

    尝试做

    <form-task :customers="@json($customers)"></form-task>
    

    <form-task :customers="{!! json_encode($customers) !!}"></form-task>
    

    尝试将 ar 定义为如下所示的计算属性

    
    The code of the Vue component is:
    
    <template>
      <div>
          <b-form-select
            v-model="selected"
            :options="ar"
            class="mb-3"
            value-field="customer_name">
          </b-form-select>     
     </div>
    </template>
    
    <script>
      export default {
            props: ['customers'],
            computed: {
              ar: {
                return JSON.parse(this.customers);
             }
          }
        }
    </script>
    

    【讨论】:

    • Vue warn]:属性或方法“json_encode”未在实例上定义,但在渲染期间引用。
    • 没有插值方法 json_encode 不起作用
    • 能分享一下laravel view的完整代码吗?
    • 我已经用视图和控制器代码更新了帖子。
    • 请检查我更新的答案,看看它是否有效
    猜你喜欢
    • 2020-02-29
    • 2018-09-14
    • 2021-01-28
    • 2017-09-04
    • 1970-01-01
    • 2021-11-27
    • 2020-12-11
    • 2021-12-25
    • 2020-08-02
    相关资源
    最近更新 更多