2017-11-12 12 views
0

Vuejs 구성 요소의 메소드 섹션에서 람다 식을 사용하고 있습니다.Vuejs Arrow 두 번째 구문을 트리거하지 않는 함수

예는 입니다. 나는 alertyou()을 트리거하고 경고 메시지가 나타나면 확인을 클릭하십시오. 그런 다음 vue 개발자 도구에서 나는 this.activatedtrue이됩니다.

export default { 
    name: 'HelloWorld', 
    data() { 
    return { 
     msg: 'Welcome to Your Vue.js App', 
     activated: false 
    } 
    }, 
    methods: { 
     alertme:() => { alert('Clicked'); this.activated = false; }, 
     alertyou() { 
     alert('Alert You'); 
     this.activated = true 
     } 
    } 
} 

그러나, 나는이 alertme 람다를 트리거 버튼을 클릭합니다. 경고 메시지가 나타나면 확인을 클릭하십시오. 하지만 그때이. 활성화 된 상태가 유지됩니다!

여기에 무슨 일이 벌어지고있는 것이 람다의 한계입니까? 람다 당 하나의 문장 만 트리거 할 수 있습니까? 또는 경고가 발령되면 범위를 처리해야합니까?

+0

아니요, 화살표 기능은 하나의 명령문 만 포함하도록 제한되지 않습니다. console.log에 대한 경고를 변경하고 다시 테스트하십시오. 경고를 사용하지 마십시오. 차단 문입니다. – WaldemarIce

+0

@WaldemarIce'alert'는 실행되는 것을 차단하지 않습니다. 문제는 화살표 함수를 사용하면 'this'를 Vue 인스턴스가 아닌 부모 범위에 바인딩한다는 것입니다. 그는'alertme'을 정규 함수로 정의해야합니다 (또는'alertyou'와 같이 사용하는 것처럼). 그는 'this'에 명시 적으로 바인딩 할 필요가 없습니다. – thanksd

+0

@thanksd 위의 의견을 읽으십시오. 나는 그가 문제가있는 곳을 안다. 그리고 당신은 잘못입니다, 경고 코드를 차단 성명입니다. 이것을 호출하면 코드 실행이 문자 그대로 일시 중지됩니다. – WaldemarIce

답변

1

여기에 람다에 대한 제한 사항이 있습니까? 람다 당 하나의 문장 만 트리거 할 수 있습니까? 또는 경고가 발령되면 범위를 처리해야합니까?

둘 다 아닙니다.

화살표 함수는 this이 화살표 함수가 작성되었을 때의 컨텍스트에 바인드되도록합니다. 이 경우 this은 vue 인스턴스가 아닙니다. 아마도 window

function 키워드 (또는 ES6 객체 속기 스타일)를 사용하여 객체에 선언 된 함수는 함수가 선언 된 객체에 일반적으로 this이 바인딩됩니다. 당신이 alertyouthis.activated에 액세스 할 수 있지만 alertme

당신은 alertme 방법을 선언 alertyou와 같은 구문을 사용하는 것이 좋습니다 이유

는 그입니다.

+0

지금 당장 어떻게 화살표 함수 구문을 계속 사용할 수 있습니까? –

+0

왜 하시겠습니까? – akatakritos

+1

@christopherclark 나쁜 소식은 당신이 단순히 Vue 인스턴스에서 메소드를 정의하기 위해 화살표 함수를 사용할 수 없다는 것입니다. 이 오해로 인해 발생하는 문제에 대해 vue 관련 SO 태그에 대해 많은 질문이 있습니다. Vue는 시작에서부터 Vue 인스턴스에 'this'를 바인딩하는 장면 마법의 일부를 수행하며 단순히 화살표 기능을 지원하지 않습니다. 화살표 함수를 사용하면 항상 'this'를 부모 범위의 컨텍스트에 바인딩합니다. 이 경우 노드의 단일 파일 구성 요소로 보이므로 'this'를'undefined '에 바인딩합니다. – thanksd

1

alertme:() => { alert('Clicked'); this.activated = false; }alertme() { alert('Clicked'); this.activated = false; }으로 변경하십시오. 작동 예제를 볼 수 있습니다 here

+0

코드와 함께 약간의 설명이 분명 도움이 될 것입니다. – yuriy636

+0

물론 : 메인 포스트의 주석에서 위에 언급 한 @thanksd와 같이 화살표 함수는이 경우 Vue 인스턴스가 아닌 부모 범위에 'this'를 바인딩합니다. 그리고 이것 때문에 당신은'function alertme() {}'로 초기화하는 일반적인 자바 스크립트 함수를 사용하거나 위에서'alertme() {}'로 볼 수있는 ES6 바로 가기를 사용할 필요가 있습니다. – jsrbn