前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue如何在父级下使用v-slot的值

Vue如何在父级下使用v-slot的值

作者头像
javascript.shop
发布2019-11-26 14:25:10
1.5K0
发布2019-11-26 14:25:10
举报
文章被收录于专栏:杰的记事本杰的记事本

关于作用域插槽v-slot的用法可以先看看文档

https://cn.vuejs.org/v2/guide/components-slots.html#%E4%BD%9C%E7%94%A8%E5%9F%9F%E6%8F%92%E6%A7%BD

现在我们进入正题

我们用到一个第三方组件validate,这个第三方组件的插槽传了一个属性error值给我们,我们现在想要在父级中获得这个error值, 为了简单起见,我们创建一个validate组件作为测试。

我们觉得可以在v-slot下使用一个方法,把error传到父级去,不就行了吗,的确是可以的: https://jsfiddle.net/jswenjie/pxru6y2m/5/

问题出现

我们的页面有多个validate的情况下,需要搜集所有的error,那么我们可以用个数组:https://jsfiddle.net/jswenjie/pxru6y2m/7/

我们发现虽然结果是正确的,不过在控制台下出现了warning警告,[Vue warn]: You may have an infinite update loop in a component render function. 有死循环的问题。

问题解决

为了解决这个问题,我考虑到是否可以用一个组件把 父级和子集关联起来呢,相当于给他们搭建一个桥梁,结果证明是可以的,就是略显繁琐,不知道大家有没有更好的方法呢?代码如下: https://jsfiddle.net/jswenjie/pxru6y2m/11/

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://cn.vuejs.org/js/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <validate v-for="x in 2" :key="x" v-slot="{ error: scopeError }">
        in scope {{ scopeError }}
        <slot-bridge
          :error="error"
          :index="x-1"
          :scope-error="scopeError"
        ></slot-bridge>
      </validate>
      <div>in parent {{ error }}</div>
    </div>
    <script>
      Vue.component("validate", {
        data() {
          return {
            error: false
          };
        },
        mounted: function() {
          setInterval(() => (this.error = Date.now()), 1000);
        },
        template: '<div><slot :error="error" /></div>'
      });

      Vue.component("slot-bridge", {
        render: () => null,
        props: ["error", "index", "scopeError"],
        watch: {
          scopeError(val) {
            this.$set(this.error, this.index, val);
          }
        }
      });
      new Vue({
        el: "#app",
        data() {
          return {
            error: []
          };
        }
      });
    </script>
  </body>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年11月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于作用域插槽v-slot的用法可以先看看文档
  • 现在我们进入正题
  • 问题出现
  • 问题解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档