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

时间:2018-07-17 23:48:45

标签: ember.js

例如,给出以下代码:

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

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

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

Ember是否有办法做到这一点?还是唯一的办法是做些骇人听闻的事情?

2 个答案:

答案 0 :(得分:2)

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

请勿直接使用this.attrs。这些值以非常怪异的方式包装,并且可能会很快从余烬中删除。看看this。对于模板,{{@arg}}已添加到余烬中。对于js代码,我们将来可能会遇到类似this.args的情况。现在,我将始终直接访问this上的参数,但是我认为使用Object.keys(this.attrs)获取传递给该组件的所有参数的名称是可以的。

答案 1 :(得分:0)

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

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