我开始使用 Angular,它实现起来非常好。我在
ng-click
遇到了一个问题。
我正在动态获取数据并用
ng-repeat
显示,我想在单击铅笔时更新数据,为此我使用输入文本元素,但是当我单击铅笔时,它会打开所有文本字段。
这是我的 HTML 代码:
<
div ng-repeat="item in scroller.items track by $index">
<div class="secHead text-center">
<button class="common btnDarkGrey" data-ng-hide="hideCatButton">{{item.category_name}}</button>
<input type="text" id="focus-{{$index}}" class="common btnDarkGrey editDashboardCategory" name="editCategory" value="" data-ng-model="item.category_name" data-ng-show="hideField">
<span data-ng-click="updateCategory(item.category_id,item.category_name,$index)" class="chkOneDone" data-ng-show="hideOkButton">Done</span>
<div class="pull-right">
<a href="#" class="pen" data-ng-click="updatePen($index)"></a>
</div>
</div>
</div>
这是我的角度代码:
$scope.updateCategory=function(category_id,updated_cat_name, $index){
Category.updateCat($rootScope,$scope,$index,$http,$timeout,updated_cat_name,old_cat_name,category_id);
};
$scope.updatePen=function($index){
old_cat_name=$scope.scroller.items[$index].category_name
$scope.hideField=true;
$rootScope.hideOkButton=true;
$rootScope.hideCatButton=true;
};
我创建了一个类别服务来执行“更新”等任务。
我可以尝试什么来解决这个问题?
如果您只想隐藏/显示列表中的某个元素,则需要以某种方式指定。现在你有三个 rootScope 布尔值:
$scope.hideField=true;
$rootScope.hideOkButton=true;
$rootScope.hideCatButton=true;
为整个列表设置,并且您需要为列表中的每个人设置显示属性。
在控制器功能中,您可以在单击之前执行类似的操作:
//normal for loop so that you have the index
for(var i=0; i < $scope.scroller.items.length; i++){
$scope.scroller.items[i].show = false;
}
然后你可以这样做来实际显示字段:
HTML:
div ng-repeat="item in scroller.items track by $index">
<div class="secHead text-center">
<button class="common btnDarkGrey" ng-hide="!item.show">
{{item.category_name}}</button>
<input type="text" id="focus-{{$index}}" class="common btnDarkGrey editDashboardCategory" name="editCategory" value="" ng-model="item.category_name" ng-hide="!item.show">
<span data-ng-click="updateCategory(item.category_id,item.category_name,$index)" class="chkOneDone" ng-show="item.show">Done</span>
<div class="pull-right">
<a href="#" class="pen" data-ng-click="updatePen($index)"></a>
</div>
</div>
</div>
Controller:
//controller declaration --
$scope.updatePen = function(index){
$scope.scroller.items[index].show = true;
};
我的理解是,一旦发生单击,您需要显示所有三个属性,因此我将所有显示属性压缩为一个显示属性。
您的视图仅看到
hideField
为 true,并对数组中的所有项目执行该操作。我希望这有帮助!