skip to Main Content

I have table for some task, In that table every row has one task.
In every row there is status which is controller by one button. Initial status of every task will be show as In Progress and text of Button as Mark Done, But when click on the button then It will change the status of the task as Done and change the text of button as Mark In Progress. If In future If we want to change the status of “Done” task then we can change the status through Button “Mark In Progress”.

Please see the live DEMO

In this live demo,

Index.html

<!DOCTYPE html>
<html>

<head>
<title>ToDo API Client Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

</head>

<body ng-app="myApp" ng-controller="tasksCtrl">
  <div class="navbar">
        <div class="navbar-inner">
            <a class="brand" href="#">ToDo API Client Demo</a>
        </div>
  </div>
  <div>

         <table class="table table-striped">
             <tr><td style="width: 1px;"></td><td><b>Task</b></td><td><b>Options</b></td></tr>
            <tr ng-repeat="task in tasks">
                <td>
                    <span data-bind="visible: done" class="label label-success">Done</span>
                    <span data-bind="visible: !done()" class="label label-important">In Progress</span>
                </td>
            <td>{{task.title}}</td>
            <td>{{task.description}}</td>
                        <td>  <a class="btn" data-toggle="modal" data-target="#modal" ng-click="editTask(task)">Edit</a></td>
                <td>  <a class="btn" data-toggle="modal" data-ng-click="removeRow(task)">Delete</a></td>

                <td>
                    <span data-bind="visible: done">
                          <button data-bind="click: $parent.markInProgress" class="btn">Mark In Progress</button>
                    </span>
                </td>
                        <td>
                     <span data-bind="visible: !done()">
                          <button data-bind="click: $parent.markDone" class="btn">Mark Done</button>
                     </span>
                </td>
            </tr>
         </table>

            <a class="btn" data-toggle="modal" data-target="#add" ng-click="editTask(task)">Add Task</a>
  </div>
  <div id="modal" role="dialog" class="modal hide fade">
        <div>
            <div class="modal-header">
                Task Dialog
            </div>
            <div class="modal-body">
                <label for="txtName"></label> 
                <input type="text"  ng-model="selectedTask.title" />
                <input type="text"  ng-model="selectedTask.description" />
            </div>
            <div class="modal-footer">
                <button class="btn btn-primary" ng-click="saveTask()" data-dismiss="modal">OK</button>
            </div>
        </div>
   </div>

   <div id="add" class="modal hide fade" tabindex="=1" role="dialog" aria-labelledby="addDialogLabel" aria-hidden="true">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            <h3 id="addDialogLabel">Add Task</h3>
        </div>
        <div class="modal-body">
            <form class="form-horizontal">
                <div class="control-group">
                    <label class="control-label" for="inputTask">Task</label>
                    <div class="controls">
                        <input type="text" id="inputTask" ng-model="task1" placeholder="Task title" style="width: 150px;"><br />
                    </div>
                </div>
                <div class="control-group">
                    <label class="control-label" for="inputDescription">Description</label>
                    <div class="controls">
                        <input type="text" id="inputDescription" ng-model="description1" placeholder="Description" style="width: 300px;">
                    </div>
                </div>
            </form>
        </div>
        <div class="modal-footer"> 
            <button class="btn btn-primary" ng-click="addNewTask()" data-dismiss="modal">Add Task</button>

            <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
        </div>
    </div>


   <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) {
          console.log(response.tasks)
          $scope.tasks = response.tasks;
        });

        $scope.editTask=function(task) {
            $scope.selectedTask = task;
        };
        $scope.removeRow = function (task) {
            $scope.tasks.splice(task, 1);
        };
        $scope.addNewTask=function(){
            //$scope.tasks.push({title :$scope.task1,description: $scope.description1});
            $scope.tasks.push({title : $scope.task1, description : $scope.description1});
            $scope.task1='';
            $scope.description1='';
           //   $scope.tasks.push('dhsh');
        };
    });
    /*
    app.controller('addNewTaskCtrl', ['$scope', function($scope){
        $scope.addNewTask=function(){
            var task;
        }
    }]);*/

  </script>
</body>

</html>

2

Answers


  1. I’m not quite sure if I understand what you’re seeking to do, but I think you may be looking for this. ngHide allows you to have elements hidden based on what you set your “ngHide” value to.

    For example:

    <!-- when $scope.buttonStatus is set to true -->
    <div ng-hide="$scope.buttonStatus" class="ng-hide"></div>
    <!-- The element would be hidden -->
    
    
    <!-- when $scope.buttonStatus's value is changed! -->
    <div ng-hide="$scope.buttonStatus"></div>
    <!-- The element would now be visible -->
    

    Let me know if you’d like any more clarification! I know this is brief 🙂

    Login or Signup to reply.
  2. Try to use ng-show and ng-hide directives.

    Here’s the Plunkr.

    E.g.

    <table class="table table-striped">
        <tbody>
            <tr>
                <td style="width: 1px;"></td>
                <td>
                    <b>Task</b>
                </td>
                <td>
                    <b>Options</b>
                </td>
            </tr>
            <tr ng-repeat="task in tasks">
                <td>
                    <span ng-show="done" class="label label-success">Done</span>
                    <span ng-hide="done" class="label label-important">In Progress</span>
                </td>
                <td>{{task.title}}</td>
                <td>{{task.description}}</td>
                <td>
                    <a class="btn" data-toggle="modal" data-target="#modal" ng-click="editTask(task)">Edit</a>
                </td>
                <td>
                    <a class="btn" data-toggle="modal" data-ng-click="removeRow(task)">Delete</a>
                </td>
                <td ng-show="done">
                    <span>
                        <button ng-click="done = !done" class="btn">Mark In Progress</button>
                    </span>
                </td>
                <td ng-hide="done">
                    <span>
                        <button ng-click="done = !done" class="btn">Mark Done</button>
                    </span>
                </td>
            </tr>
        </tbody>
    </table>
    

    Hope it helps.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search