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

var parentNode = { template: ` <p> </p><p>父组件</p> <child> <p>我是主体</p> <p>我是其他内容</p> <p>我是尾部</p> </child> `, components: { 'child': childNode }, };🎜🎜🎜🎜
<p> <slot></slot></p>🎜🎜 🎜

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

<slot></slot>
태그에 포함된 모든 항목은 🎜폴백 콘텐츠🎜로 간주됩니다. 그렇지 않으면 기본값이라고도 합니다. 대체 콘텐츠는 하위 구성 요소의 범위 내에서 컴파일되며 호스트 요소가 비어 있고 삽입할 콘텐츠가 없는 경우에만 표시됩니다.🎜🎜 슬롯에 기본값이 있고 상위 요소에 <에 삽입할 항목이 없는 경우 ;child> 콘텐츠에는 기본값이 표시됩니다🎜🎜🎜var childNode = { template: `

var parentNode = { template: ` <p> </p><p>父组件</p> <child> <template> <li>{{ props.text }}</li> </template> </child> `, components: { 'child': childNode }, };🎜🎜🎜

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

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

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

Dreamweaver Mac版
시각적 웹 개발 도구