2016-04-11 20 views
9

Tôi có một biến mảng $screenshots mà tôi đang cố gắng chuyển đến chế độ xem Laravel của mình. Thông thường, tôi sẽ sử dụng @foreach và lặp qua mảng, nhưng tôi muốn chuyển mảng đầy đủ đến một thành phần Vue bằng cách xác định nó như một giá trị. Tôi muốn làm điều này để tôi có thể lặp qua mảng trong thành phần. Tôi gặp lỗi htmlentities() expects parameter 1 to be string, array given.Vượt qua mảng để xem Laravel và sử dụng mảng đó như VueJS prop

Cách thích hợp để thực hiện điều này với VueJS và Laravel là gì?

Đây là mẫu lưỡi của tôi:

@section('content') 

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

    </ticket-edit> 

@endsection 

Đây là thành phần tùy chỉnh của tôi (tập tin khác nhau):

<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: Khi tôi thêm file đính kèm, tôi đang sử dụng json_encode để mã hóa đường dẫn đến tệp đính kèm. Sau đó, khi tôi lấy chúng, tôi chạy json_decode trong mô hình của tôi như vậy $files = json_decode($ticket->screenshots); Vì vậy, điều khiển của tôi trông như thế này:

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

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

Bạn đã bao giờ tìm ra điều này chưa? Tôi bị kẹt ở cùng một điểm – Iannazzi

Trả lời

8

Tác phẩm này - thật khó để tìm thấy câu trả lời này trên web vì vậy tôi hy vọng nó sẽ hữu ích! Bạn phải ràng buộc nó.

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

Vâng tôi không nghĩ rằng bạn cần phải json_encode vé duy nhất nhưng bạn nhận được điểm.

+0

Âm thanh tốt với tôi! Bạn đang sử dụng Vue 2, phải không? – dericcain

+0

Tôi đang sử dụng vue 2 – Iannazzi

4

Tôi nghĩ Blade gọi htmlentities() tự động khi bạn viết {{ $ticket }}. Kể từ $ticket không phải là một chuỗi, nó là lỗi. Hãy thử {{ json_encode($ticket) }}

+0

Tôi đã cập nhật các câu hỏi của mình để cho thấy rằng tôi đã giải mã được 'tệp đính kèm'. Khi tôi thử nó mà không giải mã các tập tin đính kèm, tôi nhận được một lỗi trong giao diện điều khiển 'Uncaught SyntaxError: Unexpected token u' – dericcain

1

Bạn nên sử dụng {!! json_encode($ticket) !!}}

+0

Nó có thể đẹp hơn trong mã HTML và tệp nhỏ hơn (thực sự không nhiều nếu bạn bật Gzip). Hãy cẩn thận! Điều này có thể gây ra sự cố khi nội dung của bạn chứa 'hoặc', đặc biệt là nội dung do người dùng tạo. Chỉ sử dụng {!! !!} khi bạn biết chính xác rằng bạn KHÔNG đáp ứng điều kiện ở trên. } vì mục đích an toàn. – spicydog

+0

@spicydog đồng ý –

Các vấn đề liên quan