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

时间:2016-04-11 21:16:01

标签: javascript laravel vue.js

我有一个数组变量$screenshots,我试图传递给我的Laravel视图。通常,我会使用@foreach并循环遍历数组,但我想通过将其定义为prop来将完整数组传递给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'));
}

5 个答案:

答案 0 :(得分:16)

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

value = ((buffer[i] & 0x0F) << 2) + ((buffer[i+1] & 0xC0) >> 6);

是的,我认为你不需要json_encode单票,但你明白了。

答案 1 :(得分:5)

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

答案 2 :(得分:1)

您应该使用{!! json_encode($ticket) !!}}

答案 3 :(得分:1)

我使用Laravel 7,但遇到了同样的问题。 而我使用这种解决方案并做

 {!! json_encode($ticket) !!}}

也许有更好的解决方案。 !!!

答案 4 :(得分:0)

或者,在将 $files 数组传递给视图(即在您的控制器中)之前,使用 collect($files) 将其转换为 Collection – 这样,Laravel 将处理 JSON 编码您可以随时使用,因此您可以按照最初建议的方式将其绑定到组件的属性,即

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