我有这个工作的代码片段,它重复多次,因此非常适合ng-repeat循环。 例如,我的代码的两个实例如下。
<div>
<input type="text" ng-model="searchParamaters.userName" placeholder="User Name"/>
<i class="fa fa-times" ng-click="resetSearchField(filterParamDisplay[0].param)" ng-show="showParam(filterParamDisplay[0].param)"></i>
</div>
<div>
<input type="text" ng-model="searchParamaters.userEmail" placeholder="User Email"/>
<i class="fa fa-times" ng-click="resetSearchField(filterParamDisplay[1].param)" ng-show="showParam(filterParamDisplay[1].param)"></i>
</div>
这是Javascript中的filterParamDisplay数组:
$scope.filterParamDisplay = [
{param: 'userName', displayName: 'User Name'},
{param: 'userEmail', displayName: 'User Email'}
];
我一直试图将其转换为ng-repeat循环,但到目前为止还没有成功。 这就是我编码的内容。
<div ng-repeat="param in filterParamDisplay">
<input type="text" ng-model="searchParams[{{param}}]" placeholder="{{param.displayName}}"/>
<i class="fa fa-times" ng-click="resetSearchField(filterParamDisplay[$index].param)" ng-show="showParam(filterParamDisplay[$index].param)"></i>
</div>
问题是上面的ng-model变量,以及ng-click和ng-show中的$ index。 不确定是否可以这样做,非常感谢任何帮助,谢谢!
更新: 感谢所有答案,使用
<div ng-repeat="p in filterParamDisplay">
...
ng-model="searchParams[p]"
效果很好!
仍然在使用$ index无法正常工作的showParam和resetSearchField函数上挣扎。这是我的代码。
$scope.searchParams = $state.current.data.defaultSearchParams;
$scope.resetSearchField = function (searchParam) {
$scope.searchParams[searchParam] = '';
};
$scope.showParam = function (param) {
return angular.isDefined($scope.searchParams[param]);
};
答案 0 :(得分:10)
在第一个示例中将ng模型绑定到searchParameters.userName
和searchParameters.userMail
时,必须在ng-repeat中使用searchParameters[param.param]
作为ng-model。也像其他人说的那样,你不需要使用$ index,你的对象在ng-repeat范围内为param
。
<div ng-repeat="param in filterParamDisplay">
<input type="text" ng-model="searchParameters[param.param]" placeholder="{{param.displayName}}"/>
<i class="fa fa-times" ng-click="resetSearchField(param.param)" ng-show="showParam(param.param)"></i>
</div>
这是 FIDDLE
答案 1 :(得分:2)
<div ng-app="dynamicAPP">
<div ng-controller="dynamicController">
<div ng-repeat="param in filterParamDisplay">
<input type="text" ng-model="searchParams[param.param]" placeholder="{{param.displayName}}" /> <i class="fa fa-times" ng-click="resetSearchField(filterParamDisplay[$index].param)" ng-show="showParam(filterParamDisplay[$index].param)"></i>
</div>{{searchParams}}</div>
</div>
Jsfiddler link this one for get a single object like 'username' or 'email'
你想在ng-show和ng-click使用上面的单个值。或其他明智的使用下面的一个。
<div ng-app="dynamicAPP">
<div ng-controller="dynamicController">
<div ng-repeat="param in filterParamDisplay">
<input type="text" ng-model="searchParams[param.param]" placeholder="{{param.displayName}}" /> <i class="fa fa-times" ng-click="resetSearchField(.param)" ng-show="showParam(param)"></i>
</div>{{searchParams}}</div>
</div>
Jsfiddler link this one is get whole object based on the control
这将传递整个对象列表。
答案 2 :(得分:0)
您不需要在ng-*
指令内插入角度变量。
尝试:
HTML:
<div ng-repeat="p in filterParamDisplay">
<input type="text" ng-model="searchParams[p]" placeholder="{{p.displayName}}"/>
<i ng-click="printme(p.param)">click</i>
</div>
控制器:
$scope.filterParamDisplay = [
{param: 'userName', displayName: 'User Name'},
{param: 'userEmail', displayName: 'User Email'}
];
$scope.printme = function(v) {
console.log(v);
};
答案 3 :(得分:0)
正如@aarosil所说,你不需要使用$index
。
我写了一个小jsfiddle,我不知道你在showParam背后的逻辑,所以我嘲笑它。
查看:
<div ng-controller="Ctrl">
<div ng-repeat="param in filterParamDisplay">
<input type="text" ng-model="searchParams[param.param]" placeholder="{{param.displayName}}"/>
<i class="fa fa-times" ng-click="resetSearchField(param)" ng-show="showParam(param)"></i>
</div>
</div>
和控制器:
$scope.searchParams = {};
$scope.filterParamDisplay = [
{param: 'userName', displayName: 'User Name'},
{param: 'userEmail', displayName: 'User Email'}
];
$scope.resetSearchField = function(param){
$scope.searchParams[param.param] = "";
};
$scope.showParam = function(param){ ... }