2016-12-28 1 views
0

내 응용 프로그램에서 석조물을 사용하려고합니다. 다음은 구성 요소 템플릿입니다.벽돌은 기능이 아닙니다.

<template> 
    <div> 
     <section class="section"> 
      <div class="container"> 
       <div class="row team"> 
        <div class="col-md-4 col-sm-6 member" v-for="team in teamMembers"> 
         <div class="team__item"> 
          <div class="team__info"> 
           <h4>{{team.name}}</h4> 
           <small>{{team.title}}</small> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </section> 
    </div> 
</template> 

<script src="https://unpkg.com/[email protected]/dist/masonry.pkgd.min.js"></script> 

<script> 
    export default { 
     data() { 
      return { 
       teamMembers: [] 
      } 
     }, 
     mounted() { 
      this.getTeamMembers(); 
     }, 
     methods : { 
      getTeamMembers : function() { 
       this.$http.get('teamMembers').then(response =>{ 
        // console.log(response); 
        if(response.data.status=200) { 
         this.teamMembers = response.data.teamMembers; 
         this.$nextTick(function() { 
          var $container = $('.team'); 

           $container.masonry({ 
           columnWidth: '.member', 
           itemSelector: '.member' 
           }); 
         }) 
        } 
       }) 
      } 
     } 
    } 
</script> 

보기가 렌더링 될 때마다 다음과 같은 오류가 발생합니다.

TypeError: $container.masonry is not a function 

내가 여기서 잘못하고있는 것을 알려주시겠습니까?

+0

하나의 파일 구성 요소에'script'를 포함시킬 수 있는지 확신하지 못합니다. 나는 npm을 통해 masonary를 설치해야하고, 메인 js 파일에 vue 접근을 요구하도록 masonary를 설치할 필요가 있다고 생각한다. –

+0

단일 파일 구성 요소의 중간에 그런 스크립트 태그를 넣을 수 없습니다. –

+0

스크립트 태그를 index.html로 이동하고 창을 시도하십시오. $ ('. team') – Deepak

답변

0

vue 구성 요소 DOM 요소는 this.$el까지 가져올 수 있습니다. 그래서 당신은 다음과 같은 작업을 수행 할 수

$(this.$el.querySelector('.team')).masonry({ 
          columnWidth: '.member', 
          itemSelector: '.member' 
          }); 

을하지만 구성 요소가 아니므로이만큼 유효 기억 해요 Fragment Instance 즉이 단일 루트 HTML 태그가 있습니다.


다음 스크립트 행을 index.html에 넣으면 제대로로드됩니다.

<script src="https://unpkg.com/[email protected]/dist/masonry.pkgd.min.js"></script> 
+0

아니요. 작동하지 않았습니다. 동일한 오류가 발생합니다. 그리고 나는 하나의 루트 HTML 엘레멘트를 가지고있다. – Gagan

+0

@Gagan은'this. $ http.get' 블록 내부에서'this'의 범위가 정확하다는 것을 확신합니다. [answer] (http://stackoverflow.com/) a/41093864/1610034) – Saurabh

+0

예 - 올바른'''this'' 범위가 있습니다. 나는 올바른 요소를 찾았지만 벽돌이 제대로로드되지 않은 것 같아서 그 이유를 알 수있다. – Gagan

관련 문제