AngularJS 和 Typeahead:根据所选值访问数组中的数组
AngularJS and Typeahead : Accessing an array within an array based on a selected value
我是 AngularJS 领域的新手,希望得到帮助解决这个问题:
在我的控制器中,我有以下 list/object:
$scope.languageModel = {
brands: [{ id: 1, name: 'ALGS' }, { id: 2, name: 'BLVT' }],
commodities: [
{
id: 1,
name: 'Apples',
varieties: [{ id: 1, name: 'GS' }, { id: 2, name: 'GX' }],
sizes: [{ id: 1, name: 'S' }, { id: 2, name: 'M' }],
qualities: [{ id: 1, name: 'LQ' }, { id: 2, name: 'GQ' }]
},
{
id: 2,
name: 'Oranges',
varieties: [{ id: 1, name: 'OR' }, { id: 2, name: 'ZO' }],
sizes: [{ id: 1, name: 'S' }, { id: 2, name: 'M' }],
qualities: [{ id: 1, name: 'LQ' }, { id: 2, name: 'GQ' }]
}
]
}
languageModel 用作从中填充数据的对象:
<th>
<input id="brand"
type="text"
ng-model="selected.brand"
ng-required="true"
placeholder="Brand"
uib-typeahead="brand.name for brand in languageModel.brands"
class="form-control">
</th>
<th>
<input id="commodity"
type="text"
ng-model="selected.commodities"
ng-required="true"
placeholder="Commodity"
uib-typeahead="commodities.name for commodities in
languageModel.commodities"
class="form-control">
</th>
<th>
<input id="variety"
type="text"
ng-model="selected.variety"
ng-required="true"
placeholder="Variety"
uib-typeahead="varieties.name for varieties in
getAttributeType(selected.commodity.varieties, 'varieties')"
class="form-control">
</th>
<th>
<input id="size"
type="text"
ng-model="selected.size"
ng-required="true"
placeholder="Size"
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity, 'size')"
typeahead-on-select="setItem('size')"
class="form-control">
</th>
这些当然位于 table。上面提到的所有代码都是我目前拥有的。我想知道的是如何确保#variety(同样适用于#size)由所选的#commodity填充。
例如,如果我选择苹果作为我的#commodity,那么#variety 的列将由苹果商品列表中的品种填充。
#brands 和#commodity 填充正常并正常工作,但是 getAttributeType() 似乎不起作用,当我 运行 应用程序时,#commodity 后面的框基本上被视为正常文本框。
应该这样:
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity, 'size')"
是:
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity.sizes, 'size')"
如果这不起作用,你能post一个 plunker 或 codepen 吗?
我是 AngularJS 领域的新手,希望得到帮助解决这个问题: 在我的控制器中,我有以下 list/object:
$scope.languageModel = {
brands: [{ id: 1, name: 'ALGS' }, { id: 2, name: 'BLVT' }],
commodities: [
{
id: 1,
name: 'Apples',
varieties: [{ id: 1, name: 'GS' }, { id: 2, name: 'GX' }],
sizes: [{ id: 1, name: 'S' }, { id: 2, name: 'M' }],
qualities: [{ id: 1, name: 'LQ' }, { id: 2, name: 'GQ' }]
},
{
id: 2,
name: 'Oranges',
varieties: [{ id: 1, name: 'OR' }, { id: 2, name: 'ZO' }],
sizes: [{ id: 1, name: 'S' }, { id: 2, name: 'M' }],
qualities: [{ id: 1, name: 'LQ' }, { id: 2, name: 'GQ' }]
}
]
}
languageModel 用作从中填充数据的对象:
<th>
<input id="brand"
type="text"
ng-model="selected.brand"
ng-required="true"
placeholder="Brand"
uib-typeahead="brand.name for brand in languageModel.brands"
class="form-control">
</th>
<th>
<input id="commodity"
type="text"
ng-model="selected.commodities"
ng-required="true"
placeholder="Commodity"
uib-typeahead="commodities.name for commodities in
languageModel.commodities"
class="form-control">
</th>
<th>
<input id="variety"
type="text"
ng-model="selected.variety"
ng-required="true"
placeholder="Variety"
uib-typeahead="varieties.name for varieties in
getAttributeType(selected.commodity.varieties, 'varieties')"
class="form-control">
</th>
<th>
<input id="size"
type="text"
ng-model="selected.size"
ng-required="true"
placeholder="Size"
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity, 'size')"
typeahead-on-select="setItem('size')"
class="form-control">
</th>
这些当然位于 table。上面提到的所有代码都是我目前拥有的。我想知道的是如何确保#variety(同样适用于#size)由所选的#commodity填充。
例如,如果我选择苹果作为我的#commodity,那么#variety 的列将由苹果商品列表中的品种填充。
#brands 和#commodity 填充正常并正常工作,但是 getAttributeType() 似乎不起作用,当我 运行 应用程序时,#commodity 后面的框基本上被视为正常文本框。
应该这样:
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity, 'size')"
是:
uib-typeahead="size.name for sizes in
getAttributeType(selected.commodity.sizes, 'size')"
如果这不起作用,你能post一个 plunker 或 codepen 吗?