如何在angularjs中动态隐藏和显示HTML元素?

时间:2015-07-09 12:41:51

标签: javascript angularjs

我有一些表用于某项任务,在该表中每行都有一个任务。在每一行中都有一个按钮控制器的状态。每个任务的初始状态将显示为正在进行,按钮文本显示为标记完成,但是当单击按钮时,它将更改任务的状态为完成,并将按钮文本更改为标记正在进行中。如果将来如果我们想要更改“完成”任务的状态,那么我们可以通过按钮“标记正在进行”来更改状态。请参阅DEMO on Plunker

上的DEMO

Angularjs

<script>
    var app = angular.module('myApp', []);
    app.controller('tasksCtrl', function($scope, $http) {
      $http.get("data.json")
        //$http.get("/todo/api/v1.0/tasks")
        .success(function(response) {
          $scope.tasks = response.tasks;
        });
        $scope.markInProgress=function(task){
             alert("markInProgress");
             title=task.title;
             description=task.description;
             uri=task.uri;
             var data={title: title, description: description, done: false, uri:uri};

             // For server But here there is no server so I assigne data outside $http.put
             $scope.tasks[$scope.index] = data;

             // For server
             $http.put(uri, data)
             .success(function(){
                 $scope.tasks[$scope.index] = data;
             });
        };
        $scope.markDone=function(task){
            alert("markDone");
            title=task.title;
             description=task.description;
             uri=task.uri;
             var data={title: title, description: description, done: true, uri: uri};

             // For server But here there is no server so I assigne data outside $http.put
             $scope.tasks[$scope.index] = data;

             // For server
             $http.put(uri, data)
             .success(function(){
                 $scope.tasks[$scope.index] = data;
             });
        };
    });
  </script>

2 个答案:

答案 0 :(得分:2)

有几个错误。

在HTML中,您必须引用对象的“完成”属性。

<div ng-repeat="task in tasks">
  <span ng-show="task.done" class="label label-success">Done</span>
  <span ng-show="!task.done" class="label label-important">In Progress</span>
 </div>

在您的Angualr函数中,$ scope.index是查找索引的错误方法。而是找到索引并在函数的其余部分使用var index

var index = $scope.tasks.indexOf(task);
$scope.tasks[index].done = true;

答案 1 :(得分:0)

有几种方法,我会使用ng-show

https://docs.angularjs.org/api/ng/directive/ngShow

你必须确保你的&#34;显示&#34;通过角度控制器正确设置变量。

HTML:

<div ng-show="myValue"></div>

JS:

//your controller code
(.....).success(function(){
  $scope.myValue = true;
})

如果你想隐藏你可以通过同样的方式做到这一点:

//your controller code
(.....).success(function(){
  $scope.myValue = false;
})

我希望这可以帮助你