2017-11-14 5 views
0

vue-cli가 만든 웹팩 프로젝트에서 .vue 템플릿을 사용하고 있습니다.Vue.js에서 명명 된 인스턴스를 내보내려면 어떻게 사용합니까? var app = this

나는 일반적으로 다음과 같이 파일을 내보낼 "수출 기본"을 사용 : 나는 인스턴스에 액세스하려고 할 때

export default { 
    data() { 
    return { 
     message:'' 
    }; 
}, 
... 

나중에 스크립트, 그것은 Axios의 같은 모든 기능 또는 제 3 자의 라이브러리에 보인다,

var app = this; 

    axios.post('https://test.com/api/getMessage',{}).then(res => { 
     app.message = res.data.message 
    }) 
    .catch(error => { 
     console.log(error) 
    }); 
: 예를 들어 ...

var app = this; 

그래서 난 데이터 속성에 액세스 할 수 있습니다 : 나는 상단에 이런 식으로 뭔가를 작성해야

하지만 var app = this를 호출합니다. 항상 정말 귀찮습니다.

내가 좋아 변수에 인스턴스를 넣어 선호 :

let app = { 
    data() { 
    return { 
     message:'' 
    }; 
}, 
methods :{ 
    getMessage:function(){ 

     axios.post('https://test.com/api/getMessage',{}).then(res => { 
      app.message = res.data.message 
     }) 
     .catch(error => { 
      console.log(error) 
     }); 
    } 
} 
} 

하지만 내보내거나 제대로 가져 오는 방법을 이해하지 않습니다. 모든 예제가 내보내기 기본값을 사용하는 것 같습니다. 그래서 내 질문을 재 작성, 내가 쓸 필요가 없습니다 수출하고 스크립트를 가져 더 나은/현명한 방법이 있습니다 :

var app = this; 
+0

app 대신 콜백에서'this'를 사용하십시오. – Bert

+0

나는 this.message = response.data.message와 같은 것을 시도했지만 어떤 이유로 콜백 내에서 깨진다. – mintedsky

+0

그러면 게시하지 않은 것이 잘못되었다. 코드가 마지막에 게시 한 앱인 경우 app을 제거하면 arrow 기능으로 인해 'this'가 Vue가됩니다. – Bert

답변

2
axios.post('https://test.com/api/getMessage',{}).then(res => { 
    this.message = res.data.message 
}) 

작업을해야 그 - 화살표의 기능 범위에서 개최되는 그들은 쓰여졌습니다. 즉, this은 거기에있는 Vue 인스턴스를 나타냅니다. 화살표 함수를 사용하지 않았다면 구체적으로 범위를 바인딩해야합니다 :

axios.post('https://test.com/api/getMessage',{}).then(function(res){ 
    this.message = res.data.message 
}.bind(this)) 
+0

감사합니다. 왜 그것이 작동하지 않는지 이해할 수 있도록 도와줍니다. 원래는 이전 function() 구문을 사용했습니다. 그러나 가능한 경우'this.message' 대신'app.message'를 사용하는 것을 선호합니다. 하지만 각 메소드에서 'var app = this'를 선언하고 싶지는 않습니다. 내가 구성 요소를 만들었을 때 최상위에서 호출하여 구성 요소의 모든 부분에 액세스 할 수있게하는 것이 좋습니다. – mintedsky

+1

무슨 뜻인지 알 겠어. 두 번째 예제에서와 같이해볼 수 있겠습니까? 결국에는 'export default app;'를 사용 하시겠습니까? 나는 Laravel과 다른 객체 지향 프레임 워크에서 온 것처럼'this'를 사용하는 것을 솔직하게 즐깁니다. 그래서'this'를 잠시 사용한다면 아마 익숙해 질 것입니다. 'this'는 컴포넌트 코드에 대해 alllll로 사용되므로 익숙해지기 만하면됩니다. – Jeff

+1

이 예제의'Test.vue'를보십시오. 앞에서 설명한 것처럼 구성 요소에는 작동하지 않습니다. https://codesandbox.io/s/54jq2z0pvp – Bert