@Valtasaar

Как отобразить данные при помощи Vue js?

Пытаюсь отобразить данные, полученные из БД, через Vue js.

<div class="container">
  <h1>My Tasks</h1>

  <tasks list="{{ json_encode($tasks) }}" v-on:parse="getParsed"></tasks>
</div>

<template id="tasks-template">
  <div>   
    <ul class="list-group">
      <li class="list-group-item" v-for="task in list">@{{ task.id }}</li>
    </ul>
  </div>
</template>

$tasks - переменная, содержащая данные из БД.

Vue.component('tasks', {
  template: '#tasks-template',

  props: ['list'],

  created: function () {
    this.$emit('parse', this.list);    
  }
});

new Vue({
  el: '.container',

  data: {
    list: {}
  },

  methods: {
    getParsed: function ($parsedList) {
      this.list = JSON.parse($parsedList);      
    }
  }
});

В результате получаю бесконечный список:
637d3498a9f67533842215.png

<pre>@{{ list }}</pre> выводит json строку.

console.log(this.list); выводит объект.

Vue Devtools видит объект как просто строку:
637d34d72fb00926696690.png
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Убрать emit из дочернего компонента, v-on из родительского. Параметр list - заменить статическую передачу значения на динамическую: :list="{{ json_encode($tasks) }}". Так переданное значение будет рассматриваться не как строка, а в качестве javascript выражения - применять JSON.parse не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы