Tuesday, June 4, 2024
 Popular · Latest · Hot · Upcoming
19
rated 0 times [  25] [ 6]  / answers: 1 / hits: 30749  / 8 Years ago, mon, april 11, 2016, 12:00:00

I have an array variable $screenshots that I am trying to pass to my Laravel view. Usually, I would use the @foreach and loop through the array, but I want to pass the full array to a Vue component by defining it as a prop. I want to do this so that I can loop over the array in the component. I am getting the htmlentities() expects parameter 1 to be string, array given error.



What is the proper way to do this with VueJS and Laravel?



Here is my blade template:



@section('content')

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

</ticket-edit>

@endsection


Here is my custom component (different file):



<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>


EDIT: When I am adding attachments, I am using json_encode to encode the path to the attachments. Then when I retrieve them, I run json_decode in my model like so $files = json_decode($ticket->screenshots); So my controller looks like this:



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

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

More From » laravel

 Answers
11

This works - it was hard to find this answer on the web so I hope it helps! You have to bind it.



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


Yeah I don't think you need to json_encode the single ticket but you get the point.


[#62607] Saturday, April 9, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
leighamarleem

Total Points: 75
Total Questions: 121
Total Answers: 111

Location: Norway
Member since Mon, May 23, 2022
2 Years ago
;