小编Beh*_*ath的帖子

在 Typescript 中,类型 `object` 和 `Record<any, any>` 之间有区别吗?

这两种类型object,并Record<any, any>在我看来,包括相同的一组有效的对象,这是任何事情上typeof x === "object。两者之间有什么区别吗?

typescript

7
推荐指数
1
解决办法
1449
查看次数

有没有办法检测作用域插槽是否已传递给组件?

我有一个嵌套在几层组件内的组件。作用域槽可以向下传递给该组件。我想检测什么时候不是。

例子:

Vue.component("parent", {
    template: `
        <child>
            <template slot="expand" slot-scope="{data}" v-if="$scopedSlots.expand">
                <slot name="expand" :data="data"></slot>
            </template>
        </child>
`,
});

Vue.component("child", {
    template: `
        <div>
            <slot name="expand" :data="1"></slot>
            <div @click="$scopedSlots.expand && log()">Child</div>
        </div>
`,
    methods: {
        log() {
            console.log(this.$scopedSlots.expand);
            console.log("This shouldn't work");
        }
    }
});

new Vue({
    el: "#app",
    template: `<parent></parent>`,
})
Run Code Online (Sandbox Code Playgroud)

代码笔

在此示例中,作用域槽永远不会从根组件传递到<parent>. 结果,我本以为$scopedSlots.expandv-ifin<parent>都是假的,所以没有插槽会被传递到<child>,并且单击不会执行任何操作。

然而,这似乎是错误的,原因有两个:

  • 由于$scopedSlots.expand在内部存储为函数,因此它将始终评估为真,正如您在 CodePen 的控制台中看到的那样。
  • 看起来<template>s 总是渲染,即使使用v-if="false". 因此,即使$scopedSlots.expandinside 评估为假<parent> …

javascript vue.js

4
推荐指数
1
解决办法
2846
查看次数

标签 统计

javascript ×1

typescript ×1

vue.js ×1