首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue插槽-作用域在子类元素中不工作。

Vue插槽-作用域在子类元素中不工作。
EN

Stack Overflow用户
提问于 2018-10-17 02:57:53
回答 1查看 2.7K关注 0票数 2

给定以下组件配置:

代码语言:javascript
复制
Vue.component('myComponent', {
    data () {
        return {
          msg: 'Hello',
        }
      },
    template: `
      <div class="my-component">
          <slot :msg="msg"></slot>
      </div>
    `,
})

从这样的模板中调用组件,不会将msg值绑定到grand-child元素中:

代码语言:javascript
复制
<my-component>
    <div class="parent">
        <div class="child">
            <div class="grand-child" slot-scope="{ msg }">
               {{ msg }}
            </div>
        </div>
    </div>
</my-component>

slot-scope是否仅限于直接子元素,为什么?

EN

回答 1

Stack Overflow用户

发布于 2018-10-17 03:15:26

时隙范围是否仅限于直接子元素,为什么?

是。这是因为将组件中的<slot>元素替换为传入的内容。当Vue在组件内容元素slot-scope (即您的<div class="parent">)上找到属性时,它将<slot>中找到的所有v-bind属性绑定到该命名空间。

例如

代码语言:javascript
复制
Vue.component('myComponent', {
    data () {
        return {
          msg: 'Hello',
        }
      },
    template: `
      <div class="my-component">
          <slot :msg="msg"></slot>
      </div>
    `,
})
new Vue({el: '#app'})
代码语言:javascript
复制
.parent, .child, .grand-child {
  border: 1px solid;
  padding: 2px;
}
.parent:before, .child:before, .grand-child:before {
  content: attr(class);
  display: block;
  color: #999;
  font-size: 0.8em;
}
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
<div id="app">
<my-component>
    <div class="parent" slot-scope="{ msg }">
        <div class="child">
            <div class="grand-child">
               {{ msg }}
            </div>
        </div>
    </div>
</my-component>
</div>

要进一步解释,请考虑Vue将所有HTML元素视为呈现函数。考虑到这一点,它将查看<slot>元素以及绑定到它的内容。当它用提供给组件的内容替换<slot>时,在决定要计算哪些属性和绑定哪些数据时,它会查看该根元素。它不会向下查看该元素的层次结构。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52846678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档