i have $scope.reasonlist iterate ng-repeat. if go , forward same page same data if operatotor not working , $scope.reasonlist empty. same data , same page? strings have been comparing. happening here , why?
var reasons = new array(); var roots = new array(); var repairs = new array(); var defectdescsarray = new array(); defectdescsarray= defectdescsvc.query(); $scope.rma = rmaservice.get({id: $routeparams.rmaid}); var rmahasdefects = rmadefectsvc.findbyrmaid({rmaid: $routeparams.rmaid}); rmahasdefects.$promise.then(function (result) { alert('result.length:' +result.length) (var = 0; < result.length; i++) { (var j = 0; j < defectdescsarray.length; j++) { if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) { $scope.showreasonlist = true; reasons.push(defectdescsarray[j]); } } } $scope.reasonlist = reasons; //$scope.$apply(); alert('$scope.reasonlist.length' +$scope.reasonlist.length); }); view
<div class="col-sm-10"> <table class="table table-striped table-condensed table-hover"> <tbody> <tr ng-repeat="defect in reasonlist"> <td>{{ defect.returnreasonreturnreasonid.returntext}}</td> <td>{{ defect.text}}</td> </tr> </tbody> </table> </div> angular service getting defects
angular.module('defectdescservice', ['ngresource']) .factory('defectdescsvc', ['$resource', function ($resource) { console.log('------defectdescservice-----'); return $resource( '/rmaservermav/webresources/com.rako.entity.defectdesc/:id', {}, { delete: { method: 'delete', params: {id: '@defectdescid'}}, update: { method: 'put', params: {id: '@defectdescid'} }, findbydefectdescid:{ url: '/rmaservermav/webresources/com.rako.entity.defectdesc/defect/:defid', method: 'get', params: {defid: '@defid'}, isarray:true} }); }]);
defectdescsarray applied promise. rmahasdefects promise function called , promise. rmahasdefects promise guarantee, body code executed after succesful call. problem is, when executed code run, don't have guarantee defectdescsarray array values, because promise call isn't synchronized. that's why, sometime 1 promise finish first, normal case , sometime promise finish first , reasonlist empty. prove this, log defectdescsarray in promise, , you'll see sometime it's empty , not.
for (var j = 0; j < defectdescsarray.length; j++) { console.log('defectdescsarray length:',defectdescsarray.length); if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) { the solution synchronise 2 promises, using promise on resource.
defectdescsarray= defectdescsvc.query(); //using promise , second call inside promise determine not empty //array. defectdescsarray.$promise.then(function (result) { defectdescsarray = result; $scope.rma = rmaservice.get({id: $routeparams.rmaid}); var rmahasdefects = rmadefectsvc.findbyrmaid({rmaid: $routeparams.rmaid}); rmahasdefects.$promise.then(function (result) { alert('result.length:' +result.length) (var = 0; < result.length; i++) { (var j = 0; j < defectdescsarray.length; j++) { if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) { $scope.showreasonlist = true; reasons.push(defectdescsarray[j]); } } } $scope.reasonlist = reasons; //$scope.$apply(); alert('$scope.reasonlist.length' +$scope.reasonlist.length); }); }); i basing on this post.
Comments
Post a Comment