将数组传递给 Laravel 视图并将该数组用作 VueJS 道具
Pass array to Laravel view and use that array as VueJS prop
我有一个数组变量 $screenshots
,我正试图将其传递给我的 Laravel 视图。通常,我会使用 @foreach
并循环遍历数组,但我想通过将整个数组定义为道具来将其传递给 Vue 组件。我想这样做是为了循环遍历组件中的数组。我收到 htmlentities() expects parameter 1 to be string, array given
错误。
使用 VueJS 和 Laravel 执行此操作的正确方法是什么?
这是我的 blade 模板:
@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'));
}
我认为当你写 {{ $ticket }}
时,Blade 会自动调用 htmlentities()
。由于 $ticket
不是字符串,因此它是错误的。尝试 {{ json_encode($ticket) }}
这个有效 - 很难在网上找到这个答案,所以我希望它能有所帮助!你必须绑定它。
<edit-ticket-template
v-bind:SingleTicket="{{ json_encode($ticket) }}"
v-bind: screenshots ="{{ json_encode($files) }}"
>
</edit-ticket-template>
是的,我认为您不需要 json_encode 单程票,但您明白了。
你应该使用{!! json_encode($ticket) !!}}
我使用 Laravel 7 我遇到了同样的问题。
我使用这个解决方案并做
{!! json_encode($ticket) !!}}
也许有更好的解决办法。 !!!
或者,在将 $files
数组传递给视图(即在您的控制器中)之前,使用 collect($files)
将您的 $files
数组转换为 Collection – 这样,Laravel将即时为您处理 JSON 编码,因此您可以按照最初建议的方式将其绑定到组件的 属性,即
<ticket-edit id="edit-ticket" single-ticket="{{ $ticket }}" screenshots="{{ $files }}">
已解决!您可以使用 json_encode 函数将数组|对象转换为 json 字符串。
<ticket-edit id="edit-ticket"
:single-ticket="{{ json_encode($ticket) }}"
screenshots="{{ json_encode($files) }}">
</ticket-edit>
我有一个数组变量 $screenshots
,我正试图将其传递给我的 Laravel 视图。通常,我会使用 @foreach
并循环遍历数组,但我想通过将整个数组定义为道具来将其传递给 Vue 组件。我想这样做是为了循环遍历组件中的数组。我收到 htmlentities() expects parameter 1 to be string, array given
错误。
使用 VueJS 和 Laravel 执行此操作的正确方法是什么?
这是我的 blade 模板:
@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'));
}
我认为当你写 {{ $ticket }}
时,Blade 会自动调用 htmlentities()
。由于 $ticket
不是字符串,因此它是错误的。尝试 {{ json_encode($ticket) }}
这个有效 - 很难在网上找到这个答案,所以我希望它能有所帮助!你必须绑定它。
<edit-ticket-template
v-bind:SingleTicket="{{ json_encode($ticket) }}"
v-bind: screenshots ="{{ json_encode($files) }}"
>
</edit-ticket-template>
是的,我认为您不需要 json_encode 单程票,但您明白了。
你应该使用{!! json_encode($ticket) !!}}
我使用 Laravel 7 我遇到了同样的问题。 我使用这个解决方案并做
{!! json_encode($ticket) !!}}
也许有更好的解决办法。 !!!
或者,在将 $files
数组传递给视图(即在您的控制器中)之前,使用 collect($files)
将您的 $files
数组转换为 Collection – 这样,Laravel将即时为您处理 JSON 编码,因此您可以按照最初建议的方式将其绑定到组件的 属性,即
<ticket-edit id="edit-ticket" single-ticket="{{ $ticket }}" screenshots="{{ $files }}">
已解决!您可以使用 json_encode 函数将数组|对象转换为 json 字符串。
<ticket-edit id="edit-ticket"
:single-ticket="{{ json_encode($ticket) }}"
screenshots="{{ json_encode($files) }}">
</ticket-edit>