1

I have to display some data from mongodb database using spring and angularjs. Data is being fetched to service.js method of angular js but its not displaying into html file as its not returning to controller.

UserNotification.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <!--  <h2>Approve/Reject Pending Task</h2> -->
    <div class="row">
      <table class="table table-bordered">
        <thead>
            <tr>
            <th style="text-align: center;">Task name</th>
            <th style="text-align: center;">Owner name</th>
             <th style="text-align: center; width: 25px;">Approve</th>
            <th style="text-align: center; width: 25px;">Reject</th>
            </tr>
            </thead>
            <tbody>
                <tr ng-repeat="task in taskDetails">
                    <td>{{task.name}}</td>
                    <td>{{task.owners.ownerName.id}}</td>
                    <td  style="width:70px;text-align:center;"><button class="btn btn-mini btn-primary" ng-click="approveTask(taskDetails.indexOf(task), task)">Approve</button></td>
                    <td  style="width:70px;text-align:center;"><button class="btn btn-mini btn-danger" ng-click="rejectTask(taskDetails.indexOf(task), task)">Reject</button></td>
                </tr>

            </tbody>
      </table>
      </div>
    </body>
    </html>

controller.js

    releaseApp.controller('UserNotificationController', function($scope, $location, $http, UserNotificationService) {
        $scope.taskDetails = [];
        init();
        function init() {
            $scope.photos = UserNotificationService.getTask();
            console.log('inside controller: '+$scope.taskDetails);
        }
    });

service.js

    releaseApp.factory('UserNotificationService', function($http){
        var taskDetails = [];
        var factory = {};

        factory.getTask = function() {
             $http.get('userNotification/fetchTaskForApproval').success(function(data, status, headers, config) {
                photos = data;
                console.log('inside service method'+taskDetails);
                return taskDetails;
            });
        };
        return factory;
    });

// response i am getting in  chrome console :
//inside controller: undefined
//inside service method[object Object],[object Object]
5
  • I assume you've added ng-app and ng-controller in you html ... as well as referencing the js files ... Commented May 14, 2015 at 14:04
  • console.log('inside controller: '+$scope.photos); Commented May 14, 2015 at 14:05
  • you didn't push the taskdetails Commented May 14, 2015 at 14:06
  • JqueryKing : i did change in console.log('inside controller: '+$scope.photos); but its the same response i am getting. Commented May 14, 2015 at 14:19
  • I am new to angularjs so please tell me how to push the taskdetails. I am stuck in this from last 1 week. Commented May 14, 2015 at 14:20

2 Answers 2

1

You factory method should return $http promise using .then so that promise chain will continue in controller

    factory.getTask = function() {
         return $http.get('userNotification/fetchTaskForApproval').then(function(response) {
            //photos = response.data;
            taskDetails = response.data;
            console.log('inside service method'+taskDetails);
            return taskDetails;
        });
    };

Then your controller method would be

    function init() {
        UserNotificationService.getTask().then(function(data){
            //$scope.photos = data;
            $scope.taskDetails = data;
        });
        console.log('inside controller: '+$scope.taskDetails);
    }
Sign up to request clarification or add additional context in comments.

9 Comments

Now i am getting this in console "inside controller: [object Object]" but still its not dispalying in html page.
@Girish could you tell me what console.log('inside service method: ', taskDetails); contains by doing this
Actually i am getting two object from mongodb so it contains "inside service method[object Object],[object Object]". like this : Object { id="550994e21cba9597624195aa", name="Deploy Renderer Code", team={...}, more...} this is one object. Like this there is one more object. So service method is returning two object
so you need to take look at it..and bind them properly eg. If you have object like {id="550994e21cba9597624195aa", name="Deploy Renderer Code", taskDetails={...}, photos: {}, more...} then you could do $scope.taskDetails = data.taskDetails & for photos it would be $scope.photos= data.photos
Where do i need to do this data binding? Please tell.. I am new to angularjs
|
0

for debugging purposes (e.g using console.log) :

the following concatenation will get interpreted as a string:
console.log('inside service method' + taskDetails);

try this to see if your object, taskDetails, is what you are expecting it to be:
console.log('inside service method: ', taskDetails);


EDIT: additionally, see this for general concatenation info Javascript console.log(object) vs. concatenating string

GL!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.