2016-04-11 8 views
9

Ho una variabile di matrice $screenshots che sto cercando di passare alla mia vista Laravel. Di solito, userei lo @foreach e faccio un ciclo attraverso l'array, ma voglio passare l'array completo a un componente Vue definendolo come supporto. Voglio fare questo in modo che possa scorrere l'array nel componente. Sto ottenendo l'errore htmlentities() expects parameter 1 to be string, array given.Passa la matrice alla vista Laravel e usa quella matrice come puntello VueJS

Qual è il modo corretto per farlo con VueJS e Laravel?

Ecco il mio modello di lama:

@section('content') 

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

    </ticket-edit> 

@endsection 

Qui è la mia componente personalizzato (file diverso):

<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: Quando sto aggiunta di allegati, sto usando json_encode per codificare il percorso per gli allegati. Poi quando li ho recuperare, corro json_decode nel mio modello in questo modo $files = json_decode($ticket->screenshots); Quindi il mio controller si presenta così:

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

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

Hai mai capire questo? Sono bloccato allo stesso punto – Iannazzi

risposta

8

Questo funziona - è stato difficile trovare questa risposta sul web, quindi spero che aiuti! Devi legarlo.

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

Sì non credo che è necessario json_encode il biglietto di sola andata, ma si ottiene il punto.

+0

Mi sembra buono! Stai usando Vue 2, giusto? – dericcain

+0

Sto usando vue 2 – Iannazzi

4

Penso Lama chiama htmlentities() automaticamente quando si scrive {{ $ticket }}. Poiché $ticket non è una stringa, si sta verificando un errore. Prova {{ json_encode($ticket) }}

+0

Ho aggiornato le mie domande per dimostrare che ho già decodificato gli 'allegati '. Quando provo senza decodificare gli allegati, ricevo un errore nella console 'Uncaught SyntaxError: Unexpected token u' – dericcain

1

Si dovrebbe usare {!! json_encode($ticket) !!}}

+0

Può essere più bello nel codice HTML e nel file più piccolo (in realtà non molto se abiliti Gzip) ancora. Stai attento! Ciò può causare un problema quando il contenuto contiene "o", in particolare il contenuto è generato dagli utenti. Utilizzare {!! !!} solo quando si sa esattamente che NON si soddisfa la condizione sopra. Altrimenti, stringa di escape con {{} } per motivi di sicurezza – spicydog

+0

@spicydog accetto –

Problemi correlati