有没有办法将所有属性传递给 Ember 组件?

Is there a way to get all the attributes passed to an Ember component?

例如,给定以下代码:

{{my-component foo="bar" baz="qux"}}

my-component/component.js 文件中,我需要一个方法来获取所有传递的属性,如下所示:

{
    foo: "bar",
    baz: "qux"
}

Ember有什么办法可以做到这一点吗?或者唯一的方法是做一些 hacky?

是的,您可以获得传递到组件中的属性。只需在组件内调用 this.get('attrs'),您将获得传入属性的对象。

您将无法从模板中访问属性,因此您需要创建一个 属性 计算得到的 returns 您需要的数据。 如果您严重依赖传入的 attrs 列表,则需要连接 didReceiveAttrs 或 didUpdateAttrs 并通知计算 属性 它应该更新。

最好的方法是 Object.keys(this.attrs).map(k => this[k]) (Ember 3.1+)。或 Object.keys(this.attrs).map(k => this.get(k))(所有 Ember 版本)。

不要直接使用this.attrs。这些值以一种非常奇怪的方式包装,可能很快就会从 ember 中删除。看看 this。对于模板,{{@arg}} 添加到 ember。对于 js 代码,我们可能会在将来的某个时候得到类似 this.args 的东西。现在我总是会直接访问 this 上的参数,但是我认为使用 Object.keys(this.attrs) 来获取传递给组件的所有参数的名称是好的。