首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs - dynamic ng-options

Angularjs - dynamic ng-options
EN

Stack Overflow用户
提问于 2014-05-16 03:50:49
回答 2查看 23.7K关注 0票数 13

出于我正在编写的指令的需要,我必须动态构造ng-options表达式。这是我尝试过的。

在我的指令中:

代码语言:javascript
复制
// ... scope.labelProperty = 'name';
scope.selectOptions = "l." + scope.labelProperty + " for l in list";

在我的html模板中:

代码语言:javascript
复制
<select class="form-control"
    ng-model="selected.available"
    ng-options="{{ selectOptions }}"
    multiple
    size="5"></select>

这会导致ng-options采用正确的表达式"l.name for l in list“,但选项不会显示。

求求你,你知道吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-16 04:09:19

更改您的代码,如下所示(使用javascript选择您的属性):

代码语言:javascript
复制
// ... scope.labelProperty = 'name';
scope.selectOptions = "l[labelProperty] for l in list";

<select class="form-control"
    ng-model="selected.available"
    ng-options="{{ selectOptions }}"
    multiple
    size="5"></select>
票数 11
EN

Stack Overflow用户

发布于 2015-08-14 20:41:31

我知道这是一个古老的问题,但我的挑战的许多答案都来自过时的Stackoverflow问题答案(所以谁知道这最终是否会帮助其他人呢?)我花了一段时间才弄明白该怎么做。在研究了“层叠下拉菜单”的概念后,我想出了下面的解决方案--这是我在这次搜索中学到的一个技术术语。这可能不是最好的方法,但这是我目前能想到的最好的方法,我还没有在互联网上看到过这样的例子,我想我应该分享一下。

我尝试实现了Andrew丘奇的基于ng-options的表达式,但我发现如果在select中执行此操作:

代码语言:javascript
复制
ng-options="{{ selectOptions }}"

其中假设selectOptions在您的控制器中定义为:

代码语言:javascript
复制
$scope.selectOptions = "product.description for product in productList"

然后在稍后的代码中更改它,假设用户在另一个下拉菜单上的选择为:

代码语言:javascript
复制
$scope.selectOptions = "cat.name for cat in catList"

如果您在浏览器开发人员工具中检查select元素(或者通过查看源代码),您将发现select元素现在实际上读取为'ng- options ="cat.name for cat in catList"‘,但是该元素不会被刷新以显示新选项。也就是说,在发生变化时,Angular不会重新运行ng-options函数。

我发现没有任何刷新问题的一种更动态的方法是不是控制ng-options,而是选项元素本身,如下所示:

代码语言:javascript
复制
<select class="form-control"
    ng-model="selected.available">
<option ng-if="selectOptions == 'products'" ng-repeat="product in productList" value="{{product}}">{{product.name}}</option>
<option ng-if="selectOptions == 'cats'" ng-repeat="cat in catList" value="{{cat}}">{{cat.name}}</option>
</select>

这样,您可以在另一个下拉菜单上设置一个ng-change,以调用一个函数,该函数将selectOptions设置为products/cats/您需要的任何值。Angular已经有了用ng-if隐藏/显示option元素的内置功能。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23687422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档