>  기사  >  웹 프론트엔드  >  슬롯 분배 콘텐츠 단계에 대한 자세한 설명

슬롯 분배 콘텐츠 단계에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-02 09:13:161288검색

이번에는 슬롯 배포 콘텐츠의 주의 사항에 대해 자세히 설명하겠습니다. 실제 사례를 살펴보겠습니다.

1. 슬롯이란 무엇입니까

컴포넌트를 사용할 때 다음과 같이 결합해야 하는 경우가 많습니다.

<app>
 <app-header></app-header>
 <app-footer></app-footer>
</app>

컴포넌트를 조합하여 사용해야 할 때는 상위 컴포넌트의 콘텐츠와 템플릿의 템플릿을 혼합합니다. 슬롯을 사용하는 이 프로세스를 콘텐츠 배포(transclusion)라고 합니다.

두 가지 사항에 유의하세요.

1. 구성 요소는 마운트 지점에 무엇이 포함될지 모릅니다. 마운트 지점의 콘텐츠는 의 상위 구성 요소에 의해 결정됩니다.

2. 에는 자체 템플릿이 있을 가능성이 높습니다.

props 전송 데이터, 이벤트 events 및 슬롯 콘텐츠 배포는 Vue 구성 요소의 세 가지 API 소스를 구성합니다. 구성 요소가 아무리 복잡해도 이 세 부분으로 구성됩니다.

2. 범위

<child-component>
 {{ message }}
</child-component>

여기에 있는 메시지는 슬롯이지만 구성 요소의 데이터가 아닌 상위 구성 요소의 데이터에 바인딩됩니다.

상위 구성 요소 템플릿의 콘텐츠는 상위 구성 요소 범위에서 컴파일되고 하위 구성 요소 템플릿의 콘텐츠는 하위 구성 요소 범위에서 컴파일됩니다. 예:

   <p id="app15">
      <child-component v-show="showChild"></child-component>
    </p>
Vue.component('child-component',{
  template: '<p>子组件</p>'
});
var app15 = new Vue({
  el: '#app15',
  data: {
    showChild: true
  }
});

여기의 stateshowChild는 상위 구성 요소의 데이터에 바인딩됩니다. 하위 구성 요소에 바인딩하려면 다음과 같아야 합니다.

    <p id="app15">
      <child-component></child-component>
    </p>
Vue.component('child-component',{
  template: '<p v-show="showChild">子组件</p>',
  data: function(){
    return {
      showChild: true
    }
  }
});

따라서 슬롯별로 배포되는 콘텐츠의 범위는 다음과 같습니다. 의 상위 구성 요소에 있습니다.

3. 슬롯 사용

3.1 단일 슬롯

이 하위 구성 요소 템플릿에 대한 슬롯(슬롯)을 열려면 하위 구성 요소의 특수 요소를 사용하세요. 하위 구성요소 태그 내에 삽입된 콘텐츠는 하위 구성요소의 태그와 해당 콘텐츠를 대체합니다.

 <p id="app16">
      <my-component16>
        <p>分发的内容</p>
        <p>更多分发的内容</p>
      </my-component16>
    </p>
Vue.component('my-component16',{
  template: '<p>' +
        '<slot><p>如果父组件没有插入内容,我将作为默认出现<</p></slot>' +    //预留的slot插槽
       '</p>'
});
var app16 = new Vue({
  el: '#app16'
});

렌더링 결과는 다음과 같습니다.

<p id=”app16”>
  <p>
    <p>分发的内容<p>
    <p>更多分发的内容<p>
  </p>
</p>

요소는 하위 구성 요소인 child-comComponent 의 템플릿에 정의되어 있으며

는 기본 콘텐츠로 사용됩니다. 상위 구성 요소에서 사용됩니다. 이 기본 텍스트는 슬롯이 기록되면 전체 이 교체됩니다. child-component 的模板内定义了一个<slot>元素,并且用一个<p>作为默认的内容,在父组件没有使用slot 时,会渲染这段默认的文本;如果写入了slot, 那就会替换整个<slot> 。

3.2具名slot

给<slot> 元素指定一个name 后可以分发多个内容,具名Slot 可以与单个slot 共存。

  <p id="app17">
      <my-component17>
        <h3 slot="header">标题</h3>
        <p>正文内容</p>
        <p>更多正文内容</p>
        <h3 slot="footer">底部信息</h3>
      </my-component17>
    </p>
Vue.component('my-component17',{
  template: '<p class="container">' +
         '<p class="header">' +
          '<slot name="header"></slot>' +
         '</p>' +
         '<p class="main">' +
          '<slot></slot>' +
         '</p>'+
         '<p class="footer">' +
          '<slot name="footer"></slot>' +
         '</p>'+
       '</p>'
});
var app17 = new Vue({
  el: '#app17'
});

渲染结果为:         

 <p id="app17">
        <p class="container">
          <p class="header">
            <h3>标题</h3></p>
          <p class="main"> 
            <p>正文内容</p> 
            <p>更多正文内容</p> 
          </p>
          <p class="footer">
            <h3>底部信息</h3>
          </p>
        </p>
      </p>

 子组件内声明了3 个<s lot>元素,其中在<p class=” main >内的<slot> 没有使用name 特性,它将作为默认slot 出现,父组件没有使用slot 特性的元素与内容都将出现在这里。

如果没有指定默认的匿名slot ,父组件内多余的内容片段都将被抛弃。

四、作用域插槽

作用域插槽是一种特殊的slot ,使用一个可以复用的模板替换己渲染元素。

看一个例子:     

 <p id="app18">
      <my-component18>
        <template scope="props">
          <p>来自父组件的内容</p>
          <p>{{props.msg}}</p>
        </template>
      </my-component18>
    </p>
Vue.component('my-component18',{
  template: '<p class="container"><slot msg="来自子组件的内容"></slot></p>'
});
var app18 = new Vue({
  el: '#app18'
});

观察子组件的模板,在元素上有一个类似props 传递数据给组件的写法msg=” xxx ”,将数据传到了插槽。

父组件中使用了<template>元素,而且拥有一个scope=”props ”的特性,这里的props只是一个临时变量,就像v-for= ” item in items

3.2 Named Slot 요소에 이름을 부여한 후 여러 컨텐츠를 배포할 수 있으며, Named Slot은 하나의 슬롯과 공존할 수 있습니다. Rrreee染의 결과는 다음과 같습니다.

Rrreee

하위 클래스는 3개의 기본 익명 슬롯을 지정하지 않으면 중복됩니다. 상위 구성 요소의 콘텐츠 조각은 삭제됩니다.

4. 범위 슬롯

🎜🎜범위 슬롯은 재사용 가능한 템플릿을 사용하여 렌더링된 요소를 대체하는 특수 슬롯입니다. 🎜🎜예를 살펴보세요. 🎜rrreee🎜 관찰하세요. 하위 구성요소의 템플릿입니다. 구성요소에 데이터를 전달하는 props 작성 방법은 msg="xxx"이며, 데이터는 🎜🎜상위 구성요소에 전달됩니다. 구성 요소는

위 내용은 슬롯 분배 콘텐츠 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.