将数组传递给 Laravel 视图并将该数组用作 VueJS prop

新手上路,请多包涵

我有一个数组变量 $screenshots 我试图传递给我的 Laravel 视图。通常,我会使用 @foreach 并循环遍历数组,但我想通过将整个数组定义为道具来将其传递给 Vue 组件。我想这样做是为了循环遍历组件中的数组。我收到 htmlentities() expects parameter 1 to be string, array given 错误。

使用 VueJS 和 Laravel 执行此操作的正确方法是什么?

这是我的刀片模板:

 @section('content')

    <ticket-edit id="edit-ticket" single-ticket="{{ $ticket }}" screenshots="{{ $files }}">

    </ticket-edit>

@endsection

这是我的自定义组件(不同的文件):

 <script>
    export default {

        template: '#edit-ticket-template',

        props: ['SingleTicket', 'screenshots'],

        data: function() {
            return {
                ticket: [],
                screenshots: []
            };
        },

        methods: {
            getTicket() {
                return this.ticket = JSON.parse(this.SingleTicket);
            },

            getScreenshots() {
                return this.screenshots = JSON.parse(this.files);
            },

            createNotes: function () {
                var ticketNotes = $('.summernote');
                ticketNotes.summernote({
                    height: 260,
                    toolbar: [
                        ['style', ['bold', 'italic', 'underline', 'clear', 'strikethrough']],
                        ['fontsize', ['fontsize']],
                        ['para', ['ul', 'ol']],
                    ]
                });
            }
        },

        created: function() {
            this.getTicket();
            this.getScreenshots();
        },

        ready: function() {
            this.createNotes();
        }

    }
</script>

编辑: 当我添加附件时,我正在使用 json_encode 来编码附件的路径。然后当我检索它们时,我在我的模型中运行 json_decode $files = json_decode($ticket->screenshots); 所以我的控制器看起来像这样:

 public function edit($sub_domain, $id)
{
    $ticket = Ticket::find($id);
    $files = json_decode($ticket->screenshots);

    return view('templates.tickets-single', compact('ticket', 'files'));
}

原文由 dericcain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 416
2 个回答

这行得通——很难在网上找到这个答案,所以我希望它能有所帮助!你必须绑定它。

  <edit-ticket-template
      v-bind:SingleTicket="{{  json_encode($ticket) }}"
      v-bind: screenshots ="{{  json_encode($files) }}"
  >
  </edit-ticket-template>

是的,我认为您不需要对单票进行 json_encode,但您明白了。

原文由 Iannazzi 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为当您编写 {{ $ticket }} 时,Blade 会自动调用 htmlentities() 。由于 $ticket 不是字符串,所以它是错误的。试试 {{ json_encode($ticket) }}

原文由 Jeff 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题