有没有办法将所有属性传递给 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)
来获取传递给组件的所有参数的名称是好的。
例如,给定以下代码:
{{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)
来获取传递给组件的所有参数的名称是好的。