EmberJS:将参数传递到组件中

dy2hfwbg  于 2022-10-20  发布在  其他
关注(0)|答案(1)|浏览(153)

我正在学习关于Ember的ij0k1l教程。js,我很难理解一个“简单”的参数传递问题。
我有一个product JSON对象:

{
  "id": "1",
  "name": "Headphones",
  "colors": [{
    "color": "red",
    "image": "/assets/images/headphones-red.png"
  },
  {
    "color": "black",
    "image": "/assets/images/headphones-black.png"
  }]
},
...
other products with the same structure

这个对象被传递给index.hbs模板内的Product组件,如下所示:

<Product @product={{product}}/>

Product.hbs模板中,我有以下内容:

<Product::Image @src={{this.productImage}}/>
<Product::Details 
    @name={{@product.name}}
/>

productImageProduct的组件关联product.js中定义:

import Component from '@glimmer/component';

export default class ProductComponent extends Component {
    productImage = this.args.product.colors[0].image;
}

我的问题是:为什么我必须定义一个特定的组件属性,而不是像name属性那样做?类似这样:

<Product::Image @src={{@product.colors[0].image}}/>

本教程没有解释它,只是说“args表示参数,这是传递属性。这就是我们在JS中使用传递数据的方式”*。
有人能照亮我吗?

xpcnnkqh

xpcnnkqh1#

我想没有什么特别的理由要定义一个单独的属性来做这件事,除非在这个特殊的情况下,它增加了可读性,即“哦,我们传递产品图像”,而不是“我们传递颜色数组的第一个元素的图像值”,但我很确定这是不言而喻的。
可以像您建议的那样做,但语法稍有不同。问题是,hbs不理解colors[0]。但它会理解m1o1p,甚至colors.0

<Product::Image @src={{@product.colors.[0].image}}/>

or

<Product::Image @src={{@product.colors.0.image}}/>

我还玩过twiddle中的其他选项

相关问题