AngularJS v1.6.6:能否在ng-repeat指令中用变量替换firstP?
AngularJS 1.6.6中ng-repeat用变量替换对象键的解决方案
嘿,刚看到你的问题,作为摸过AngularJS 1.x好几年的老玩家,来给你唠唠怎么解决~当然可以把people['firstP']里的firstP换成变量,这在AngularJS 1.6.6版本里完全可行,核心思路就是利用模板里的方括号语法支持变量解析。
具体实现步骤:
在控制器中定义变量
首先你需要把要替换的键名(比如firstP/SecondP)存到控制器的作用域里(不管是$scope还是用controllerAs语法的vm对象都可以)。举个用$scope的例子:angular.module('yourApp', []) .controller('yourCtrl', function($scope) { // 你的原始people对象 $scope.people = { "firstP": [ "", "James", "Jack" ], "SecondP": [ "", "Bill", "Bob" ] }; // 定义用来替换的变量,这里可以默认设为'firstP',也可以动态修改 $scope.activePersonKey = 'firstP'; });在模板中使用变量访问对象属性
把原来的people['firstP']改成people[activePersonKey]就可以了,ng-repeat会自动解析变量对应的键:<div ng-repeat="option in people[activePersonKey]"> {{ option }} </div>
进阶:动态切换键值
如果需要动态切换显示哪组数据,比如加个下拉框来选择,直接把activePersonKey绑定到下拉框的ng-model就行:
<select ng-model="activePersonKey"> <option value="firstP">第一组人员</option> <option value="SecondP">第二组人员</option> </select> <!-- 下拉框切换时,ng-repeat的内容会自动更新 --> <div ng-repeat="option in people[activePersonKey]"> {{ option }} </div>
小提示
这个语法是AngularJS模板表达式的基础特性,1.6.6版本完全支持,不用担心兼容性问题。只要变量在当前作用域中能被访问到,就能用方括号语法来动态访问对象的属性~
内容的提问来源于stack exchange,提问作者user3046739
相关产品推荐
相关产品推荐

