2016-06-16 8 views
0

를 통해 반복하지 나는 다음과 같은 설정이 있습니다뷰 JS V-에 대한 구성 요소 특성

JS

var session = { 
    content : { 
     products : { 
      options : { 
       page : 1, 
       productsPerPage : 20, 
       orderBy : 'customPriority', 
       orderDirection : 'asc' 
      }, 
      productList : [ 
        {name: 'a'}, 
        {name: 'b'}, 
        {name: 'c'}, 
        {name: 'd'}, 
      ] 
     } 
    } 
} 


Vue.component('product-list', { 
    props: { 
     options: { type: Object }, 
     products : { type: Array, required: true } 
    } 
}) 

var app = new Vue({ 
    el: '#app', 
    data: session 
}) 

HTML

<div id="app"> 
    <product-list 
     :options="content.products.options" 
     :products="content.products.productList" 
    > 
    <div 
     v-for="product in products" 
    > 
     <h1> 
     {{product.name}} 
     </h1> 
    </div> 
    </product-list> 
</div> 

(jsFiddle : https://jsfiddle.net/Lfw94bgz/1/)

내 문제는 v-for 지시어가 작동하지 않는 것처럼 보입니다. 제품 배열이 정의되고 vue-dev-tools에 표시됩니다. this example은 동일한 배열을 반복적으로 처리하는 것처럼 보입니다. prop를 통해 compent).

오류/콘솔에 경고, 나는 확실히 당신의 도움이

답변

0

내가 주변에 조금 연주하고 작업을 얻었다에 대한 감사를 잃은거야. Here is a working fork of your project. 내가 만든 변경 사항은 <div id="listTemplate"> 인 HTML 섹션에 있으며 제품 목록 구성 요소 선언에 template: '#listTemplate'을 추가했습니다.

Vue 구성 요소에 대한 오해가 있습니다. Vue 구성 요소는 자바 스크립트 및 HTML 코드의 재사용 가능한 세트로 원하는 곳 어디로나 간단히 삽입 할 수 있습니다. 템플릿 내에서 구성 요소가 어떻게 보이는지 정의해야합니다. 그러면 App Vue 인스턴스 내에서 <product-list></product-list>이라고 말하면됩니다.

템플릿이하는 일은 구성 요소 태그가있는 모든 HTML 코드를 정의하는 것입니다. 예를 들어, <product-list></product-list>은 "<div id="listTemplate">의 내용을 복사하여 여기에 붙여 넣으십시오."

+0

우선 내 엉덩이를 저장해 주셔서 감사합니다. 그러나 내 코드가 너무 효과가 있어야한다고 생각합니다. 템플릿이 구성 요소에 전달되는 방식을 변경하면 왜 동작에 영향을 미치는지 이해할 수 없습니다. –

+0

vuejs docs [여기] (https://vuejs.org/guide/components.html#Single-Slot)를 확인하면 하위 구성 요소의 템플릿 내에 ''을 참조하면 HTML 코드를 주입 ​​할 수 있다고합니다. . 하지만 정직하게 말하면, 이것이 역동적 일 필요는없는 것 같기 때문에, 나는 컴포넌트의 템플릿 내에 모든 코드를 가지고있다. – dargue3