2017-11-26 17 views
0

아이디어가 간단합니다. Vue 인스턴스는 API에서 그룹을로드합니다. 이 그룹은 v-for 구문을 사용하여 표시됩니다.데이터가 변경된 후 Vue v-for 목록이 업데이트되지 않습니다.

그룹 데이터가 올바르게 포맷되고 v-for 목록을 업데이트해야하는 .push 함수를 사용하여 app.groups에 추가됩니다.

그러나 v-for 목록은 업데이트되지 않습니다.

v-for = "그룹에있는 그룹"(외부에로드 됨)을 v-for = "그룹의 사람들"(이미 앱에 있음)으로 변경하면 출력됩니다.

HTML

<div id="app" class="col-md-8 col-md-offset-2"> 
     <div class="panel panel-default"> 
      <div class="panel-heading">Realtime Socket Chat</div> 
       <div class="panel-body" v-if="dataReady" v-for="group in groups"> @{{ group.name }} 
        <a v-bind:href="group.link" class="pull-right"> 
         <div class="btn btn-xs btn-primary"> 
          Join 
         </div> 
        </a> 
       </div> 
      </div> 
     </div> 
    </div> 

var app = new Vue({ 
    el: "#app", 
    data: { 
     groups: [], 
     people: [{name: 'hi'}, {name: 'lol'}] 
    }, 
    mounted: function() { 
     this.load() 
    }, 
    methods: { 
     load: function() { 
      axios.get('http://example.com/groups') 
       .then(function (response) { 

       console.log(response.data.groups); 

       response.data.groups.forEach(function(group) { 
        app.groups.push(group); 
       }); 

       // app.groups.forEach(function (group) { 
       // group.link = '/g/' + group.id + '/join'; 
       // }); 
       // console.log(response.data.groups); 

       console.log(this.groups); //outputs [{...}, {...}] so this.groups is good 
      }) 
      .catch(function (error) { 
       this.errors.push(error); 
       console.log(error); 
      }) 
     } 
    } 

}); 

API

{

"그룹": [ {

"id": 1, 
    "name": "Photography Chat", 
    "created_at": "2017-11-26 08:50:16", 
    "updated_at": "2017-11-26 08:50:16" 
}, 

{ 
    "id": 2, 
    "name": "Media Chat", 
    "created_at": "2017-11-26 08:50:16", 
    "updated_at": "2017-11-26 08:50:16" 
} 
당신의 load 기능이 실행될 때 app이 정의처럼 691,363,210은

]

}

+0

업데이트 : adding : key = "group.id"가 작동하지 않았습니다. – Eltyer

답변

0

내가 질문에서 남긴 사실을 (나는 그것이 문제가되지 것입니다 가정 때문에) 나는 Laravel 프레임 워크 내에서 작업하고 있음을했다, Laravel은 main.js에서 Vuejs를 자동으로 가져옵니다. Vue가 추가로로드 될 때 멋지지 않습니다. main.js를 제거하고 작동합니다.

1

보인다 . 그래서, ES6 화살표 함수 구문을 사용하여 load 기능은 다음과 같아야합니다

load: function() { 
    axios.get('http://example.com/groups') 
    .then(response => {  
     let groups = response.data.groups || [] 

     groups.forEach(group => { 
     this.groups.push(group) 
     }) 

     console.log(this.groups) 

    }) 
    .catch(error => { 
     this.errors.push(error) 
     console.log(error) 
    }) 
} 
+0

또한 app.groups 또는 this.groups에서 데이터를 푸시하는 작업 방법이기도하지만 Vue보기도 업데이트되지 않습니다. 보다 구체적으로, Vue 인스턴스에있는 데이터 만 이미로드됩니다. "app.groups.push ({name :"Another Group "}];"새 그룹이 app.groups로 푸시되지만보기가 업데이트되지 않더라도. – Eltyer

+0

Ok, – Ikbel

+0

문제는 Vue가 내가 포함 된 src로 인해로드 된 것이고, 그 후에 Vue 앱이 초기화 된 후에 Laravel이 기본적으로로드하기 때문에 Vue가 다시로드 된 것입니다. Vue 라이브러리의 두 번째로드로 인해 첫 번째 Vue 앱이 중단되었습니다. – Eltyer