Sidharth
Sidharth

Reputation: 1462

how can I show a div and perform a task on ng-click Angular JS?

I have a list of users in a page and a form in which I edit the details of those users. the form is hidden, I want to display the form when I click on edit button and also perform the task to edit it

html:

<body ng-app="myApp" class="ng-cloak">
<div class="generic-container" ng-controller="ListController as ctrl">

    <div class="panel panel-default">
        <!-- Default panel contents -->
        <div class="panel-heading">
            <span class="lead">List of Users </span>
        </div>
        <div class="tablecontainer">
            <table class="table table-hover">
                <thead>
                    <tr>
                        <th>ID.</th>
                        <th>Name</th>
                        <th>Address</th>
                        <th>Email</th>
                        <th>Phone No.</th>
                        <th width="20%"></th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="u in ctrl.users">
                        <td><span ng-bind="u.id"></span></td>
                        <td><span ng-bind="u.username"></span></td>
                        <td><span ng-bind="u.address"></span></td>
                        <td><span ng-bind="u.email"></span></td>
                        <td><span ng-bind="u.phone"></span></td>
                        <td>
                            <button type="button" ng-click="ctrl.edit(u.id)"
                                class="btn btn-success custom-width">Edit</button>
                            <button type="button" ng-click="ctrl.remove(u.id)"
                                class="btn btn-danger custom-width">Remove</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>




    <div class="panel panel-default" ng-show="ctrl.users.length>0">
        <div class="modal-header">
            <span class="lead">User Registration Form </span>
        </div>
        <div class="formcontainer">
            <div class="modal-body">
                <form ng-submit="ctrl.submit()" name="myForm"
                    class="form-horizontal">
                    <input type="hidden" ng-model="ctrl.user.id" />


                    <div class="row">
                        <div class="form-group col-md-12">
                            <label class="col-md-2 control-lable" for="uname">Name</label>
                            <div class="col-md-7">
                                <input type="text" ng-model="ctrl.user.username" id="uname"
                                    class="username form-control input-sm"
                                    placeholder="Enter your name" required ng-minlength="3" />
                                <div class="has-error" ng-show="myForm.$dirty">
                                    <span ng-show="myForm.uname.$error.required">This is a
                                        required field</span> <span ng-show="myForm.uname.$error.minlength">Minimum
                                        length required is 3</span> <span ng-show="myForm.uname.$invalid">This
                                        field is invalid </span>
                                </div>
                            </div>
                        </div>
                    </div>


                    <div class="row">
                        <div class="form-group col-md-12">
                            <label class="col-md-2 control-lable" for="address">Address</label>
                            <div class="col-md-7">
                                <input type="text" ng-model="ctrl.user.address" id="address"
                                    class="form-control input-sm"
                                    placeholder="Enter your Address. [This field is validation free]" />
                            </div>
                        </div>
                    </div>


                    <div class="row">
                        <div class="form-group col-md-12">
                            <label class="col-md-2 control-lable" for="email">Email</label>
                            <div class="col-md-7">
                                <input type="email" ng-model="ctrl.user.email" id="email"
                                    class="email form-control input-sm"
                                    placeholder="Enter your Email" required />
                                <div class="has-error" ng-show="myForm.$dirty">
                                    <span ng-show="myForm.email.$error.required">This is a
                                        required field</span> <span ng-show="myForm.email.$invalid">This
                                        field is invalid </span>
                                </div>
                            </div>
                        </div>
                    </div>


                    <div class="row">
                        <div class="form-group col-md-12">
                            <label class="col-md-2 control-lable" for="phone">Phone
                                No.:</label>
                            <div class="col-md-7">
                                <input type="text" ng-model="ctrl.user.phone" id="phone"
                                    class="phone form-control input-sm" ng-minlength="7"
                                    ng-maxlength="10" placeholder="Enter your Phone Number"
                                    required />
                                <div class="has-error" ng-show="myForm.$dirty">
                                    <span ng-show="myForm.phone.$error.required">This is a
                                        required field</span> <span ng-show="myForm.uname.$error.minlength">Minimum
                                        length required is 7</span> <span ng-show="myForm.phone.$invalid">This
                                        phone number is invalid </span>
                                </div>
                            </div>
                        </div>
                    </div>


                    <div class="row">
                        <div class="form-actions floatRight">
                            <input type="submit"
                                value="{{!ctrl.user.id ? 'Add' : 'Update'}}"
                                class="btn btn-primary btn-sm" ng-disabled="myForm.$invalid">
                            <button type="button" ng-click="ctrl.reset()"
                                class="btn btn-warning btn-sm" ng-disabled="myForm.$pristine">Reset
                                Form</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>









</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.js"></script>
<script src="<c:url value='/static/js/app.js' />"></script>
<script src="<c:url value='/static/js/service/user_service.js' />"></script>
<script src="<c:url value='/static/js/controller/list_Controller.js' />"></script>

User Controller.js:

'use strict';

angular.module('myApp').controller('UserController', ['$scope',   'UserService', function($scope, UserService) {
var self = this;
self.user={id:null,username:'',address:'',email:'',phone:''};
self.users=[];

self.submit = submit;
self.edit = edit;
self.remove = remove;
self.reset = reset;



fetchAllUsers();

function fetchAllUsers(){
    UserService.fetchAllUsers()
        .then(
        function(d) {
            self.users = d;
        },
        function(errResponse){
            console.error('Error while fetching Users');
        }
    );
}

function createUser(user){
    UserService.createUser(user)
        .then(
        fetchAllUsers,
        function(errResponse){
            console.error('Error while creating User');
        }
    );
}

function updateUser(user, id){
    UserService.updateUser(user, id)
        .then(
        fetchAllUsers,
        function(errResponse){
            console.error('Error while updating User');
        }
    );
}

function deleteUser(id){
    UserService.deleteUser(id)
        .then(
        fetchAllUsers,
        function(errResponse){
            console.error('Error while deleting User');
        }
    );
}

function submit() {
    if(self.user.id===null){
        console.log('Saving New User', self.user);
        createUser(self.user);
    }else{
        updateUser(self.user, self.user.id);
        console.log('User updated with id ', self.user.id);
    }
    reset();
}

function edit(id){
    console.log('id to be edited', id);
    for(var i = 0; i < self.users.length; i++){
        if(self.users[i].id === id) {
            self.user = angular.copy(self.users[i]);
            break;
        }
    }
}

function remove(id){
    console.log('id to be deleted', id);
    if(self.user.id === id) {//clean form if the user to be deleted is shown there.
        reset();
    }
    deleteUser(id);
}


function reset(){
    self.user={id:null,username:'',address:'',email:'',phone:''};
    $scope.myForm.$setPristine(); //reset Form
}

}]);

UserService.js

'use strict';

 angular.module('myApp').factory('UserService', ['$http', '$q', function($http, $q){

var REST_SERVICE_URI = 'http://localhost:8080/Spring4MVCAngularJSExample/user/';

var factory = {
    fetchAllUsers: fetchAllUsers,
    createUser: createUser,
    updateUser:updateUser,
    deleteUser:deleteUser
};

return factory;

function fetchAllUsers() {
    var deferred = $q.defer();
    $http.get(REST_SERVICE_URI)
        .then(
        function (response) {
            deferred.resolve(response.data);
        },
        function(errResponse){
            console.error('Error while fetching Users');
            deferred.reject(errResponse);
        }
    );
    return deferred.promise;
}

function createUser(user) {
    var deferred = $q.defer();
    $http.post(REST_SERVICE_URI, user)
        .then(
        function (response) {
            deferred.resolve(response.data);
        },
        function(errResponse){
            console.error('Error while creating User');
            deferred.reject(errResponse);
        }
    );
    return deferred.promise;
}


function updateUser(user, id) {
    var deferred = $q.defer();
    $http.put(REST_SERVICE_URI+id, user)
        .then(
        function (response) {
            deferred.resolve(response.data);
        },
        function(errResponse){
            console.error('Error while updating User');
            deferred.reject(errResponse);
        }
    );
    return deferred.promise;
}

function deleteUser(id) {
    var deferred = $q.defer();
    $http.delete(REST_SERVICE_URI+id)
        .then(
        function (response) {
            deferred.resolve(response.data);
        },
        function(errResponse){
            console.error('Error while deleting User');
            deferred.reject(errResponse);
        }
    );
    return deferred.promise;
}

}]);

After when I click on the update button the div should hide too.

Upvotes: 0

Views: 127

Answers (1)

This can be done using ng-show directive. I see you are using it with the following code:

<div ng-show="ctrl.users.length>0">...</div>

This would not be trigger angular.js' data-binding. Instead it will always be equal to the initial value: ng-show="false".

Solution

Create a variable in the controller and expose it to your view:

self.showForm = false;
//when you click on the edit button
self.showForm = true;

And in your html file ng-show="ctrl.showForm"

Upvotes: 2

Related Questions