vue의 $attrs 및 $listeners 속성을 알아보고 사용법에 대해 이야기해 보세요.
이 기사에서는 vue: $attrs 및 $listeners 속성에서 구성 요소를 캡슐화하는 강력한 도구를 소개하고 해당 도구가 어떻게 사용되는지 살펴보겠습니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
다중 레벨 구성 요소 중첩이 데이터를 전달해야 할 때 일반적으로 사용되는 방법은 vuex
를 이용하는 것입니다. 하지만 중간 처리 없이 데이터를 전송하고 vuex
를 사용하여 처리하는 것은 과잉입니다. 따라서 $attrs
및 $listeners
라는 두 가지 속성이 있으며 일반적으로 InheritAttrs와 함께 사용됩니다. [관련 권장사항: vuejs 비디오 튜토리얼vuex
。但仅仅是传递数据,不做中间处理,使用 vuex
处理,未免有些大材小用了。所以就有了 $attrs
、 $listeners
两个属性 ,通常配合 inheritAttrs 一起使用。【相关推荐:vuejs视频教程】
$attrs
- 从父组件传给自定义子组件的属性,如果没有
prop
接收会自动设置到子组件内部的最外层标签上,如果是class
和style
的话,会合并最外层标签的class
和style
。 - 如果子组件中不想继承父组件传入的非
prop
属性,可以使用inheritAttrs
禁用继承,然后通过v-bind="$attrs"
把外部传入的 非prop
属性设置给希望的标签上,但是这不会改变class
和style
。
inheritAttrs 属性
2.4.0 新增
官网链接 https://cn.vuejs.org/v2/api/#inheritAttrs
类型:
boolean
默认值:
true
-
详细:
默认情况下父作用域的不被认作 props 的 attribute 绑定 (attribute bindings) 将会“回退”且作为普通的 HTML attribute 应用在子组件的根元素上。当撰写包裹一个目标元素或另一个组件的组件时,这可能不会总是符合预期行为。通过设置
inheritAttrs
到false
,这些默认行为将会被去掉。而通过 (同样是 2.4 新增的) 实例 property$attrs
可以让这些 attribute 生效,且可以通过v-bind
显性的绑定到非根元素上。注意:这个选项不影响
class
和style
绑定。
例子:
父组件
<template> <my-input required placeholder="请输入内容" type="text" class="theme-dark" /> </template> <script> import MyInput from './child' export default { name: 'parent', components: { MyInput } } </script>
子组件
<template> <div> <input v-bind="$attrs" class="form-control" /> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script>
子组件中没有接受父组件中传过来的值,也没有绑定,但是有v-bind="$attrs"
这个属性,他会自动接受并绑定
inheritAttrs: false
inheritAttrs: true
$listeners (官网解释)
- listeners: 包含了父作用域中的 (不含
.native
修饰器的)v-on
事件监听器。它可以通过v-on="$listeners"
传入内部组件——在创建更高层次的组件时非常有用。
先上代码:这里只举例focue
、input
两个原生事件
// 父组件 <template> <my-input required placeholder class="theme-dark" @focue="onFocus" @input="onInput" > </my-input> </template> <script> import MyInput from './child' export default { components: { MyInput }, methods: { onFocus (e) { console.log(e.target.value) }, onInput (e) { console.log(e.target.value) } } } </script>
// 子组件 <template> <div> <input type="text" v-bind="$attrs" class="form-control" @focus="$emit('focus', $event)" @input="$emit('input', $event)" /> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script>
这样绑定原生事件很麻烦,每一个原生事件都需要绑定,但用v-on="$listeners"
]
$ attrs
- 수신된
prop
가 없는 경우 상위 구성 요소에서 사용자 정의 하위 구성 요소로 전달된 속성은 자동으로 하위 구성 요소 내의 가장 바깥쪽 태그로 설정됩니다. code>class 및style
, 가장 바깥쪽 태그의class
및style
이 병합됩니다. - 하위 구성 요소가 상위 구성 요소가 전달한
prop
속성이 아닌 속성을 상속하지 않으려는 경우inheritAttrs
를 사용하여 상속을 비활성화할 수 있습니다. 그런 다음v-bind ="$attrs"
를 전달하면 외부에서 전달된prop
가 아닌 속성을 원하는 태그로 설정하지만class</code는 변경되지 않습니다. > 및 <code>스타일< /code>. </li></ul><p><strong><span style="font-size: 18px;">inheritAttrs 속성</span></strong></p><blockquote><p>2.4.0 추가됨 <a href="https://www.php.cn/vuejs/" target="_blank" textvalue="vuejs教程"></a>공식 웹사이트 링크 https ://cn.vuejs.org/v2/api/#inheritAttrs<a href="https://www.php.cn/course/list/1.html" target="_blank"></blockquote><ul><li></a><strong>유형</strong>: <code>부울
< li>🎜기본값: - 🎜세부정보: 🎜🎜기본적으로 상위 범위는 속성이 아닙니다. props로 인식된 바인딩은 "폴백"되어 일반 HTML 속성으로 하위 구성 요소의 루트 요소에 적용됩니다. 대상 요소나 다른 구성 요소를 래핑하는 구성 요소를 작성할 때 이는 항상 예상되는 동작을 따르지 않을 수 있습니다.
inheritAttrs
를false
로 설정하면 이러한 기본 동작이 제거됩니다. 이러한 속성은 인스턴스 속성(2.4의 새로운 기능)을 통해 유효해질 수 있으며v-bind
를 통해 루트가 아닌 요소에 명시적으로 바인딩될 수 있습니다. 🎜🎜참고: 이 옵션은클래스
및스타일
바인딩에 영향을 주지 않습니다. 🎜
true
🎜<input type="text" v-bind="$attrs" class="form-control" + v-on="$listeners" - @focus="$emit('focus', $event)" - @input="$emit('input', $event)" />
v-bind="$attrs"
속성을 사용하면 자동으로 값을 수락하고 바인딩합니다 🎜🎜inheritAttrs: false🎜🎜 $listeners(공식 웹사이트 설명)
-
listeners: 상위 범위의 콘텐츠를 포함합니다(
.native 제외). code> 데코레이터) <code>v-on
이벤트 리스너.v-on="$listeners"
를 통해 내부 구성 요소로 전달할 수 있습니다. 상위 수준 구성 요소를 만들 때 매우 유용합니다.
focue
및 input
🎜rrreeerrreee🎜네이티브를 바인딩하는 것은 매우 번거로운 작업입니다. 이런 이벤트는 각각의 모든 네이티브 이벤트를 바인딩해야 하지만 v-on="$listeners"
를 사용하면 많은 문제를 줄일 수 있습니다🎜rrreee🎜이런 식으로 코드 한 줄로 문제를 해결할 수 있습니다. 모든 네이티브 이벤트 바인딩 문제🎜🎜【관련 추천 : "🎜vuejs tutorial🎜", "🎜web front-end🎜"]🎜위 내용은 vue의 $attrs 및 $listeners 속성을 알아보고 사용법에 대해 이야기해 보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











vue.js에서 bootstrap 사용은 5 단계로 나뉩니다 : Bootstrap 설치. main.js.의 부트 스트랩 가져 오기 부트 스트랩 구성 요소를 템플릿에서 직접 사용하십시오. 선택 사항 : 사용자 정의 스타일. 선택 사항 : 플러그인을 사용하십시오.

HTML 템플릿의 버튼을 메소드에 바인딩하여 VUE 버튼에 함수를 추가 할 수 있습니다. 메소드를 정의하고 VUE 인스턴스에서 기능 로직을 작성하십시오.

vue.js의 시계 옵션을 사용하면 개발자가 특정 데이터의 변경 사항을들을 수 있습니다. 데이터가 변경되면 콜백 기능을 트리거하여 업데이트보기 또는 기타 작업을 수행합니다. 구성 옵션에는 즉시 콜백을 실행할지 여부와 DEEP를 지정하는 즉시 포함되며, 이는 객체 또는 어레이에 대한 변경 사항을 재귀 적으로 듣는 지 여부를 지정합니다.

VUE 멀티 페이지 개발은 vue.js 프레임 워크를 사용하여 응용 프로그램을 구축하는 방법입니다. 여기서 응용 프로그램은 별도의 페이지로 나뉩니다. 코드 유지 보수 : 응용 프로그램을 여러 페이지로 분할하면 코드를보다 쉽게 관리하고 유지 관리 할 수 있습니다. 모듈 식 : 각 페이지는 쉬운 재사용 및 교체를 위해 별도의 모듈로 사용할 수 있습니다. 간단한 라우팅 : 페이지 간의 탐색은 간단한 라우팅 구성을 통해 관리 할 수 있습니다. SEO 최적화 : 각 페이지에는 자체 URL이있어 SEO가 도움이됩니다.

vue.js에서 JS 파일을 참조하는 세 가지 방법이 있습니다. & lt; script & gt; 꼬리표;; mounted () 라이프 사이클 후크를 사용한 동적 가져 오기; Vuex State Management Library를 통해 수입.

vue.js는 이전 페이지로 돌아갈 수있는 네 가지 방법이 있습니다. $ router.go (-1) $ router.back () 사용 & lt; router-link to = & quot;/quot; Component Window.history.back () 및 메소드 선택은 장면에 따라 다릅니다.

vue.js가 트래버스 어레이 및 객체에 대한 세 가지 일반적인 방법이 있습니다. V- 결합 지시문은 V-FOR와 함께 사용하여 각 요소의 속성 값을 동적으로 설정할 수 있습니다. .MAP 메소드는 배열 요소를 새 배열로 변환 할 수 있습니다.

VUE에서 DIV 요소를 점프하는 두 가지 방법이 있습니다. VUE 라우터를 사용하고 라우터 링크 구성 요소를 추가하십시오. @Click 이벤트 리스너를 추가하고 이것을 호출하십시오. $ router.push () 메소드를 점프하십시오.
