Vue 콘텐츠 배포 슬롯
앞의 말
컴포넌트를 구성하기 위해서는 상위 컴포넌트의 컨텐츠와 하위 컴포넌트의 자체 템플릿을 혼합하는 방법이 필요합니다. 이 프로세스를 콘텐츠 배포(또는 "전환")이라고 합니다. Vue는 특수 <slot>
요소를 원시 콘텐츠용 슬롯으로 사용하여 현재 초안 웹 구성 요소 사양을 따르는 콘텐츠 배포 API를 구현합니다. 이 글에서는 Vue 콘텐츠 배포 슬롯을 자세히 소개합니다<slot>
元素作为原始内容的插槽。本文将详细介绍Vue内容分发slot
编译作用域
在深入内容分发 API 之前,先明确内容在哪个作用域里编译。假定模板为
<child-component> {{ message }} </child-component>
message
应该绑定到父组件的数据,还是绑定到子组件的数据?答案是父组件。组件作用域简单地说是:父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。
一个常见错误是试图在父组件模板内将一个指令绑定到子组件的属性/方法:
<!-- 无效 --> <child-component v-show="someChildProperty"></child-component>
假定someChildProperty
是子组件的属性,上例不会如预期工作。父组件模板不应该知道子组件的状态
如果要绑定作用域内的指令到一个组件的根节点,应当在组件自己的模板上做:
Vue.component('child-component', { // 有效,因为是在正确的作用域内 template: '<p v-show="someChildProperty">Child</p>', data: function () { return { someChildProperty: true } } })
类似地,分发内容是在父作用域内编译
默认丢弃
一般地,如果子组件模板不包含<slot>
插口,父组件的内容将会被丢弃
var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p>测试内容</p> </child> </p> `, components: { 'child': childNode }, };
<p id="example"> <parent></parent></p><script src="https://unpkg.com/vue"></script><script>var childNode = { template: ` <p class="child"> <p>子组件</p> </p> `, };var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p>测试内容</p> </child> </p> `, components: { 'child': childNode }, };// 创建根实例new Vue({ el: '#example', components: { 'parent': parentNode } })</script>
如下图所示, 测试内容
匿名slot
当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot></slot> </p> `, };
var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p>测试内容</p> </child> </p> `, components: { 'child': childNode }, };
如果出现多于1个的匿名slot,vue将报错
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot></slot> <slot></slot> </p> `, };
【默认值】
最初在 <slot>
标签中的任何内容都被视为备用内容,或者称为默认值。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容
当slot存在默认值,且父元素在
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot><p>我是默认值</p></slot> </p> `, }; var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child></child> </p> `, components: { 'child': childNode }, };
当slot存在默认值,且父元素在
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot><p>我是默认值</p></slot> </p> `, }; var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p>我是设置值</p> </child> </p> `, components: { 'child': childNode }, };
具名Slot
<slot>
元素可以用一个特殊的属性 name
来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot
컴파일 범위
콘텐츠 배포 API에 대해 자세히 알아보기 전에 먼저 콘텐츠가 어느 범위에서 컴파일되는지 명확히 하세요. 템플릿이var childNode = { template: ` <p class="child"> <p>子组件</p> <slot name="my-header">头部默认值</slot> <slot name="my-body">主体默认值</slot> <slot name="my-footer">尾部默认值</slot> </p> `, };
메시지
를 상위 구성 요소의 데이터에 바인딩해야 할까요, 아니면 하위 구성 요소의 데이터에 바인딩해야 할까요? 대답은 부모 구성 요소입니다. 구성 요소 범위는 간단히 말해서 상위 구성 요소 템플릿의 콘텐츠가 상위 구성 요소 범위에서 컴파일되고 하위 구성 요소 템플릿의 콘텐츠가 하위 구성 요소 범위에서 컴파일된다는 의미입니다. 일반적인 실수는 상위 구성 요소 템플릿 내에서 하위 구성 요소의 속성/메서드에 지시문을 바인딩하려고 하는 것입니다. var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p slot="my-header">我是头部</p> <p slot="my-footer">我是尾部</p> </child> </p> `, components: { 'child': childNode }, };
someChildProperty
가 하위 구성 요소의 속성이라고 가정하면, 위의 예는 예상대로 작동하지 않습니다. 상위 구성 요소 템플릿은 하위 구성 요소의 상태를 알 수 없습니다.
범위가 지정된 지시문을 구성 요소의 루트 노드에 바인딩하려면 구성 요소 자체 템플릿에서 수행해야 합니다.
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot name="my-body">主体默认值</slot> <slot></slot> </p> `, };
마찬가지로, 배포 콘텐츠는 상위 범위에서 컴파일됨
기본적으로 삭제됨
일반적으로 하위 구성 요소 템플릿에 <slot>
소켓이 포함되어 있지 않으면 콘텐츠는 discarded
var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p slot="my-body">我是主体</p> <p>我是其他内容</p> <p slot="my-footer">我是尾部</p> </child> </p> `, components: { 'child': childNode }, };
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot name="my-body">主体默认值</slot> </p> `, };
test 콘텐츠
img src="https://img.php .cn/upload/article/000/000/004/ea9cd4b5a1243e63c504926b758b7700-0.png" alt=""/>익명 슬롯

var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <p slot="my-body">我是主体</p> <p>我是其他内容</p> <p slot="my-footer">我是尾部</p> </child> </p> `, components: { 'child': childNode }, };
<p class="child"> <slot text="hello from child"></slot></p>

var childNode = { template: ` <p class="child"> <p>子组件</p> <slot xxx="hello from child"></slot> </p> `, }; var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <template scope="props"> <p>hello from parent</p> <p>{{ props.xxx }}</p> </template> </child> </p> `, components: { 'child': childNode }, };

<slot>
태그에 포함된 모든 항목은 🎜폴백 콘텐츠🎜로 간주됩니다. 그렇지 않으면 기본값이라고도 합니다. 대체 콘텐츠는 하위 구성 요소의 범위 내에서 컴파일되며 호스트 요소가 비어 있고 삽입할 콘텐츠가 없는 경우에만 표시됩니다.🎜🎜 슬롯에 기본값이 있고 상위 요소에 <에 삽입할 항목이 없는 경우 ;child> 콘텐츠에는 기본값이 표시됩니다🎜🎜🎜var childNode = { template: ` <ul> <slot name="item" v-for="item in items" :text="item.text">默认值</slot> </ul> `, data(){ return{ items:[ {id:1,text:'第1段'}, {id:2,text:'第2段'}, {id:3,text:'第3段'}, ] } } };

var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <template slot="item" scope="props"> <li>{{ props.text }}</li> </template> </child> </p> `, components: { 'child': childNode }, };

이름이 지정된 슬롯
🎜
요소는 특수 속성 name
을 사용하여 콘텐츠 배포 방법을 구성할 수 있습니다. 여러 슬롯의 이름이 다를 수 있습니다. 명명된 슬롯은 해당 slot
속성 🎜🎜🎜rrreee🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜이 있는 콘텐츠 조각의 요소와 일치합니다. 여전히 🎜인 익명 슬롯을 가질 수 있습니다. 기본 슬롯🎜, 콘텐츠 조각에 대해 일치하는 대체 슬롯을 찾을 수 없습니다. 익명 슬롯은 슬롯 속성이 없는 요소에 대한 슬롯으로만 사용할 수 있습니다. 슬롯 속성이 있는 요소에 대해 슬롯이 구성되지 않은 경우 >Insert 나는 다른 콘텐츠
Insert <slot>이며가 삭제됩니다. 🎜🎜🎜🎜🎜 기본 슬롯이 없으면 일치하는 항목을 찾을 수 없는 이러한 콘텐츠 조각은 또한 삭제됩니다 🎜🎜🎜rrreee🎜🎜🎜🎜rrreee🎜🎜🎜
나는 다른 콘텐츠
및가 삭제되었습니다🎜🎜🎜🎜🎜🎜
作用域插槽
作用域插槽是一种特殊类型的插槽,用作使用一个 (能够传递数据到) 可重用模板替换已渲染元素。
在子组件中,只需将数据传递到插槽,就像将 props 传递给组件一样
<p class="child"> <slot text="hello from child"></slot></p>
在父级中,具有特殊属性 scope
的 <template>
元素必须存在,表示它是作用域插槽的模板。scope
的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象
var childNode = { template: ` <p class="child"> <p>子组件</p> <slot xxx="hello from child"></slot> </p> `, }; var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <template scope="props"> <p>hello from parent</p> <p>{{ props.xxx }}</p> </template> </child> </p> `, components: { 'child': childNode }, };
如果渲染以上结果,得到的输出是
【列表组件】
作用域插槽更具代表性的用例是列表组件,允许组件自定义应该如何渲染列表每一项
var childNode = { template: ` <ul> <slot name="item" v-for="item in items" :text="item.text">默认值</slot> </ul> `, data(){ return{ items:[ {id:1,text:'第1段'}, {id:2,text:'第2段'}, {id:3,text:'第3段'}, ] } } };
var parentNode = { template: ` <p class="parent"> <p>父组件</p> <child> <template slot="item" scope="props"> <li>{{ props.text }}</li> </template> </child> </p> `, components: { 'child': childNode }, };
위 내용은 Vue 콘텐츠 배포 슬롯의 상세 내용입니다. 자세한 내용은 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)

특히 지난 10년 동안 모바일 장치는 친구 및 가족과 콘텐츠를 공유하는 주요 방법이 되었습니다. 접근하기 쉽고 사용하기 쉬운 인터페이스와 실시간으로 이미지 및 비디오를 캡처할 수 있는 기능은 콘텐츠 제작 및 공유를 위한 탁월한 선택입니다. 그러나 악의적인 사용자가 이러한 도구를 악용하여 보기에 적합하지 않고 사용자의 동의가 필요하지 않은 원치 않는 민감한 콘텐츠를 전달하기 쉽습니다. 이러한 일이 발생하지 않도록 iOS17에는 "민감한 콘텐츠 경고"라는 새로운 기능이 도입되었습니다. 이에 대해 살펴보고 iPhone에서 사용하는 방법을 살펴보겠습니다. 새로운 민감한 콘텐츠 경고는 무엇이며 어떻게 작동하나요? 위에서 언급한 것처럼 민감한 콘텐츠 경고는 사용자가 iPhone을 포함한 민감한 콘텐츠를 보지 못하도록 설계된 새로운 개인 정보 보호 및 보안 기능입니다.

Microsoft Edge 브라우저에서 360 탐색 페이지를 여는 페이지를 변경하는 방법은 실제로 매우 간단하므로 이제 Microsoft Edge에서 360 탐색 페이지를 여는 페이지를 변경하는 방법을 공유하겠습니다. 브라우저가 필요한 친구가 모두를 도울 수 있기를 바랍니다. Microsoft Edge 브라우저를 엽니다. 아래와 같은 페이지가 보입니다. 오른쪽 상단에 있는 점 3개 아이콘을 클릭하세요. '설정'을 클릭하세요. 설정 페이지의 왼쪽 열에서 "시작 시"를 클릭하세요. 오른쪽 열의 그림에 표시된 세 지점을 클릭한 다음("새 탭 열기"를 클릭하지 마세요), 편집을 클릭하고 URL을 "0"(또는 기타 의미 없는 숫자)으로 변경하세요. 그런 다음 "저장"을 클릭하세요. 다음으로 '를 선택하세요.

CheatEngine은 게임의 메모리를 편집하고 수정할 수 있는 게임 편집기입니다. 그러나 기본 언어는 중국어가 아니므로 많은 친구들에게 불편을 줍니다. 그렇다면 CheatEngine에서 중국어를 설정하는 방법은 무엇입니까? 오늘은 에디터가 CheatEngine에서 중국어를 설정하는 방법에 대해 자세히 소개하겠습니다. 도움이 되셨으면 좋겠습니다. 설정 방법 1: 1. 두 번 클릭하여 소프트웨어를 열고 왼쪽 상단에 있는 "편집"을 클릭합니다. 2. 그런 다음 아래 옵션 목록에서 "설정"을 클릭하세요. 3. 열리는 창의 왼쪽 열에서 "언어"를 클릭하세요.

다운로드 버튼을 표시하도록 Microsoft Edge가 어디에 설정되어 있는지 알고 계시나요? 아래에서 편집기를 통해 다운로드 버튼을 표시하도록 설정하는 방법을 알려드리겠습니다. 1단계: 먼저 Microsoft Edge Browser를 열고 아래 그림과 같이 오른쪽 상단에 있는 [...] 로고를 클릭합니다. 2단계: 그런 다음 아래 그림과 같이 팝업 메뉴에서 [설정]을 클릭합니다. 3단계: 그런 다음 아래 그림과 같이 인터페이스 왼쪽에 있는 [모양]을 클릭합니다. 4단계: 마지막으로 [다운로드 버튼 표시] 오른쪽에 있는 버튼을 클릭하면 아래 그림과 같이 회색에서 파란색으로 변경됩니다. 위는 편집기가 Microsoft Edge에서 다운로드 버튼을 설정하는 방법을 제공하는 곳입니다.

PyInstaller는 개발자가 Python 코드를 플랫폼 독립적인 자체 포함 실행 파일(.exe 또는 .app)로 컴파일할 수 있는 오픈 소스 라이브러리입니다. Python 코드, 종속성 및 지원 파일을 함께 패키징하여 Python 인터프리터를 설치하지 않고도 실행할 수 있는 독립 실행형 애플리케이션을 생성함으로써 이를 수행합니다. PyInstaller의 장점은 Python 환경에 대한 종속성을 제거하여 애플리케이션을 최종 사용자에게 쉽게 배포하고 배포할 수 있다는 것입니다. 또한 사용자가 애플리케이션의 설정, 아이콘, 리소스 파일 및 환경 변수를 사용자 정의할 수 있는 빌더 모드도 제공합니다. PyInstaller를 사용하여 PyInstal을 설치하여 Python 코드 패키징

PyInstaller는 원래 스크립팅 형식을 뛰어넘어 Python 애플리케이션을 강화하는 혁신적인 도구입니다. Python 코드를 독립형 실행 파일로 컴파일함으로써 PyInstaller는 코드 배포, 배포 및 유지 관리의 새로운 영역을 열어줍니다. 단일 스크립트에서 강력한 애플리케이션까지 과거에는 Python 스크립트가 특정 Python 환경에만 존재했습니다. 이러한 스크립트를 배포하려면 사용자가 Python과 필요한 라이브러리를 설치해야 하는데, 이는 시간이 많이 걸리고 번거로운 프로세스입니다. PyInstaller는 Python 코드와 모든 필수 종속성을 단일 실행 파일로 결합하는 패키징 개념을 도입합니다. 코드 패키징 기술 PyInstaller의 작업

The Painted Traveler in Time and Space는 2월 29일 업데이트가 확정되었습니다. 플레이어는 Ain과 함께 야외 음악 축제에 가서 Ain과 함께 호감도 보너스를 얻을 수 있습니다. The Lingering Holiday Color Time 이벤트는 3월 4일에 시작됩니다. , 플레이어는 휴가 일정 레벨을 업그레이드하여 새로운 문자 메시지와 Lofter 콘텐츠를 잠금 해제할 수 있습니다. 시공을 여행하는 아인의 일상 : 상설 콘텐츠 업데이트 2월 29일 버전 이후 새로운 캠퍼스 스케줄 [야외음악제 참여하기]를 체험할 수 있으며, 아인과 함께 참여하면 호감도 보너스를 받을 수 있습니다. . 3월 4일 09:30부터 4월 15일 05:00까지 '그리움의 휴일·섹시한 시간' 이벤트 기간 동안 [휴가 일정] 레벨을 8레벨, 28레벨로 업그레이드하면 각각 새로운 문자 메시지와 로프터 콘텐츠가 잠금 해제된다. *새 SMS 및 Lofter가 추가되었습니다.

출처: Shenchao TechFlow 솔라나 생태계에서 세간의 이목을 끄는 신흥 프로젝트인 Jupiter는 짧은 출시에도 불구하고 DeFi 분야에서 빠르게 등장했습니다. 그러나 이렇게 빠르게 발전하는 환경에서도 경제 모델의 개선과 토큰 가격의 안정성은 여전히 중요합니다. 이러한 지원이 없으면 프로젝트는 결국 쇠퇴하거나 심지어 유지 불가능하게 되는 악순환에 쉽게 빠질 수 있습니다. 따라서 Jupiter는 프로젝트의 장기적인 개발과 성공을 보장하기 위해 지속적으로 경제적 설계를 최적화하고 토큰 가격 안정성을 보장해야 합니다. 솔라나 체인은 지난 주에 2차 시장에서 토큰 SOL이 빠르게 상승하고, Jupiter의 토큰 $JUP도 지난 2주 동안 상승하는 등 강력한 성과를 거두었습니다.
