IT이야기

소품 포함 VueJ 중첩 목록 렌더링

cyworld 2022. 7. 23. 09:36
반응형

소품 포함 VueJ 중첩 목록 렌더링

Vue.js를 사용하여 중첩 목록을 렌더링하려고 하는데 중첩된 구성 요소 부분에서 코드가 실패합니다.기본 템플릿:

<body>
  <div id="app">
    <ul>
      <li v-for="todo in todos">
        {{ todo.text }}
        <ul>
          <todo-item v-for="subtodo in todo.subTodos" v-bind:subtodo="subtodo"></todo-item>
        </ul>
      </li>
    </ul>
  </div>
</body>

그리고 내 js 파일:

Vue.component('todo-item', {
  template: '<li>{{subtodo.text}}</li>',
  prop: ['subtodo']
})

var app = new Vue({
  el: '#app',
  data: function () {
    return {
      todos : [
        { 
          text : 'Learn JavaScript', 
          subTodos : [
            { text : 'Linting'}, 
            { text : 'Bundling'}, 
            { text : 'Testing'}
          ]
        },
        { 
          text : 'Learn Vue', 
          subTodos : [
            { text : 'Components'}, 
            { text : 'Virtual DOM'}, 
            { text : 'Templating'}
          ]
        },
        { 
          text : 'Build something awesome', 
          subTodos : [
            { text : 'Build'}, 
            { text : 'Something'}, 
            { text : 'Awesome'}
          ]
        }
      ]
    }
  }
})

으로는 첫 번째 본 with 、 본 、 basically 、 basically 、 basically 、 basically 、 basically 、 basically 、 basically 、 basically 、 basically 、 。v-for을 실시합니다 이 는 서브컴포넌트에 됩니다.v-bind현재 인스턴스를 사용하여 자녀의 템플릿에서 사용할 수 있습니다.

https://jsfiddle.net/ny7a5a3y/4/에서 작업을 하고 있습니다.

콘솔에 다음 오류가 나타납니다.

[Vue warn]: Property or method "subtodo" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.

제가 무엇을 빠뜨리고 있나요?

오타입니다. 컴포넌트에 있는 소품이 소품이라고 하셨죠.

Vue.component('todo-item', {
  template: '<li>{{subtodo.text}}</li>',
  props: ['subtodo']
})

https://jsfiddle.net/uofmd96q/

이것을 시험해 보세요.

<todo-item v-for="st of todo.subTodos" :subtodo="st"></todo-item>

클릭 시 중첩 목록을 렌더링해야 하는 경우 나중에 참조할 수 있도록 항목 색인을 사용하여 만든 매우 간단한 중첩 목록 예제입니다.

<div v-for="(aggList, index) in aggregationList">
        <div v-on:click="LoadAggIndex(index)">
            {{aggList.name}} and index: {{index}}
        </div>

    </div>

<div v-for="agg in loadedAggList">
        {{agg.key}}
        {{agg.count}}
    </div>

Vue.js

 methods: {
        LoadAggIndex: function (index) {
            SearchBar.loadedAggList = SearchBar.aggregationList[index].aggregates;
        }
    }

언급URL : https://stackoverflow.com/questions/41110825/vuejs-nested-list-rendering-with-props

반응형