vue选项之provide和inject

vue选项之provide和inject

参考:https://cn.vuejs.org/v2/api/#provide-inject

 

 

类型:

  • provide
Object | () => Object
  • inject
Array<string> | {[key: string]: string | Symbol | Object}

 

详细:

provide和inject主要在开发高阶插件/组件库时使用。

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。

provide选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的property

inject选项应该是:

  • 一个字符串数组,或
  • 一个对象,对象的key是本地的绑定名,value是:
    •   在可用的注入内容中搜索用的key,或
    •   一个对象,该对象的:
      •         from property是在可用的注入内容中搜索用的key
      •         default property是降级情况下使用的value

 

提示:provide和inject绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听对象,那么其对象的property还是可响应的

示例:

复制代码
// 父级组件提供'foo'
var Provider = {
    provide: {
        foo: 'bar'
    },
    // ...
}

// 子组件注入'foo'
var Child = {
    inject: ['foo'],
    created () {
        console.log(this.foo); // => "bar"
    },
    // ...
}
复制代码

 

利用ES2015 Symbols、函数provide和对象inject:

复制代码
const s = Symbol()

const Provider = {
    provide() {
        return {
            [s]: 'foo'
        }
    }
}

const Child = {
    inject: { s },
    // ...
}
复制代码

 

使用一个注入的值作为一个property的默认值:

复制代码
const Child = {
    inject: ['foo'],
    props: {
        bar: {
            default () {
                return this.foo
            }
        }
    }
}
复制代码

 

使用一个注入的值作为数据入口:

const Child = {
    inject: ['foo'],
    data () {
        return {
            bar: this.foo
        }
    }
}

 

通过设置默认值使其变成可选项:

const Child = {
    inject: {
        foo: { default: 'foo' }
    }
}

 

如果它需要从一个不同名字的property注入,则使用from来表示其源property:

const Child = {
    inject: {
        foo: {
            from: 'bar',
            default: 'foo'
        }
    }
}

 

与prop的默认值类似,你需要对非原始值使用一个工厂方法:

const Child = {
    inject: {
        foo: {
            from: 'bar',
            default: () => [1, 2, 3]
        }
    }
}

 

posted on   独自去流浪  阅读(449)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示