ng-click 显示 ng-repeat 上的所有隐藏文本字段,而不是 Angular 中的一个

问题描述 投票:0回答:1

我开始使用 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;
        
};

我创建了一个类别服务来执行“更新”等任务。

我可以尝试什么来解决这个问题?

angularjs angularjs-scope angularjs-ng-repeat
1个回答
1
投票

如果您只想隐藏/显示列表中的某个元素,则需要以某种方式指定。现在你有三个 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,并对数组中的所有项目执行该操作。我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.