2017-12-01 8 views
0

data 속성에 액세스하려면 가짜 this을 작성하지 않으려면 어떻게해야합니까? Array.forEach에 전달 된 새 함수가 있으므로 thi 키워드는 실제로 Vue 인스턴스가 아닌 함수를 참조합니다. Vue 내부 함수의 범위를 다시 정의하지 않으려면 어떻게해야합니까?

created() { 
    this.items.push({ 
     value: 1000, 
     selected: false 
    }); 

    var otherThis = this; 
    someAjaxOperation.returnedJson.forEach(function (item, index) { 
     otherThis.items.push({ 
      selected: false, 
      value: item 
     }) 
    }); 
} 

당신이 볼 수 있듯이

, 나는 this의 복사본을 만드는 해키 해결 방법을 가지고있다. 더 좋은 방법이 있습니까?

+0

하는가은 https ://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback?rq=1 일부 가능성을 설명하는 데 도움이되지 않습니까? 난 정말 당신의 솔루션을 '해킹 된 해결 방법'이라고 전혀 부르지 않을 것입니다. –

+0

중복이 아니라는 점을 감안하면, Vue를 사용하는 것은 'this'로 작업하는 자체 방법을 가지고 있기 때문입니다. – user9993

+0

@ user9993 아니요, Vue는 특별한 방식으로 'this'를 사용하지 않습니다. – WaldemarIce

답변

0

vue 인스턴스에 항상 액세스 할 수있는 쉬운 방법 중 하나는 선언 할 때 사용한 변수를 사용하는 것입니다.

그래서 예를 들어, 당신은 다음과 같은 코드가있는 경우 :

var app = new Vue({ 
     el: '#app', 
     data: { 
       someVar: 1 
     } 
    }); 

그럼 당신은 항상

그래서 귀하의 예제가 될 app.someVar를 통해 someVar에 액세스 할 수 있습니다 :

created() { 
    this.items.push({ 
     value: 1000, 
     selected: false 
    }); 


    someAjaxOperation.returnedJson.forEach(function (item, index) { 
     app.items.push({ 
      selected: false, 
      value: item 
     }) 
    }); 
} 
+0

이것은 매우 흥미로운 접근 방법입니다. 이것이 어떻게 반응성에 일반적으로 영향을 미칠지 궁금하다. Vue가 배열을 추적 할 수있을 것이라고 생각하지 않는다. 나는 화살표 함수가 내 필요에 따라 작동한다는 것을 알았고 레거시 브라우저를 지원하려면 기본적으로 'this'사본을 만들어야한다. – user9993

+0

이 방법은 반응성에 전혀 영향을 미치지 않습니다. 예상대로 계속 작동합니다. 실제로 비 vue 코드에서이 방법을 사용하여 vue 데이터를 변경하고 페이지를 반응적으로 업데이트 할 수도 있습니다. 아주 편리합니다. –

+2

나는이 접근법을 자주 여기에서 볼 수 있으며 일반적으로 나쁜 생각이다. 'app'를 전역 적으로 노출시키는 것과 같은 이상한 일을 시작하지 않는 한, 전체 app이 Vue가 생성되는 동일한 범위 ('app'가 정의 된)에서 정의되는 매우 간단한 상황에서만 작동합니다. 나는 이것이 나쁜 습관이라고 생각한다. – Bert