부모 레벨에서 v-slot 값에 접근하는 방법 - vuejs

2122 단어

역할 영역 슬롯 v-slot의 사용법에 대해 문서를 먼저 볼 수 있습니다


https://cn.vuejs.org/v2/guide/components-slots.html#%E4%BD%9C%E7%94%A8%E5%9F%9F%E6%8F%92%E6%A7%BD

이제 본론으로 들어갑니다.


우리는 제3자 구성 요소validate를 사용합니다. 이 제3자 구성 요소의 슬롯은 우리에게 속성 error 값을 전달합니다. 우리는 지금 부급에서 이 error 값을 얻고 싶습니다. 간단하게 보기 위해서validate 구성 요소를 테스트로 만듭니다.
우리는 v-slot 아래에서 하나의 방법을 사용하여 error를 아버지급으로 전달하면 된다고 생각한다. 확실히 할 수 있다.https://jsfiddle.net/jswenjie/pxru6y2m/5/
 

문제 발생


우리의 페이지가 여러 개의validate가 있는 상황에서 모든 error를 수집해야 합니다. 그러면 우리는 하나의 그룹을 사용할 수 있습니다.https://jsfiddle.net/jswenjie/pxru6y2m/7/


  
    
  
  
    
in scope {{ error }} {{ sendToParent(error, x-1) }}
in parent {{ error }}
// validate Vue.component("validate", { data() { return { error: "" }; }, mounted: function() { setInterval(() => (this.error = Date.now()), 1000); }, template: '<div><slot :error="error" /></div>' }); new Vue({ el: "#app", data() { return { error: [] }; }, methods: { sendToParent(error, index) { this.$set(this.error, index, error); } } });

 
결과는 정확했지만 컨트롤러 아래에 Warning 경고가 발생했습니다. [Vue warn]: You may have an infinite update loop in a component render function.사순환의 문제가 있다.

문제 해결


나는 해결 방안이 하나 있다(https://javascript.shop/2019/11/get-slot-prop-in-parent-by-v-slot), 여러분 먼저 제 방안을 보지 마세요. 여러분의 사고방식에 영향을 줄 수 있습니다. 왜냐하면 저는 제 방안이 약간 복잡하다고 느끼기 때문입니다.여러분에게 더 좋은 해결 방안이 있는지 댓글로 알려주신 것을 환영합니다. 감사합니다.

좋은 웹페이지 즐겨찾기