JMD
JMD

Reputation: 89

Why ng-repeate object not getting updated?

This is the function which load listings from server. Initially listings are displayed but when gets null response on applying filter, it still shows previous result and not clearing previous listings.

 $scope.browseListing = function (strURL) {
        $scope.CurrentTab = strURL;
        $scope.getURL(strURL);
        $http.post($scope.URL)
                .then(function (response) {
                    if (response.data != 'null') {
                        $scope.Data = response.data;
                        $scope.TotalListingCount = $scope.Data.length;                                            
                        $window.alert('Result is not null');
                    }
                    else {
                        $scope.TotalListingCount = '0';
                        $window.alert('Result is null');
                        $scope.Data = [];
                    }
                }, function (response) {
                    $log.info(response);
                });
    };

Edited

enter image description here

How do I solve this so that on empty response previous listings gets cleared and shows no listings?

Upvotes: 1

Views: 56

Answers (2)

JMD
JMD

Reputation: 89

The following create new scopes, and inherit prototypically: ng-repeat, ng-include, ng-switch, ng-view, ng-controller, directive with scope: true, directive with transclude: true.

So, use $parent with 'ng-repeate' to reference to parent scope instead of using newly created scope byng-repeat` as-

<tr ng-repeat="listing in $parent.Data | orderBy : sortColumn : SortDirection">

After adding $parent in ng-repeat to scope property in UI it updates UI as per changes.

Here is full description of scope

Upvotes: 0

Ramesh Rajendran
Ramesh Rajendran

Reputation: 38663

May be your scope does not update. Please try this below ( it's not 100% good approach, But at this time you can solve your issue)

 if(!$scope.$$phase) {
  $scope.$apply(
         $scope.Data = [];
       );
  }    
   $scope.TotalListingCount = '0';
   $window.alert('Result is null');
  • and please check your console having any error.

Update : try another way like this (declare empty object globally)

    .then(function (response) {
                            $scope.TotalListingCount = '0';
                            $scope.Data = [];
                        if (response.data != 'null') {
                            $scope.Data = response.data;
                         $scope.TotalListingCount = $scope.Data.length;                                             
                            $window.alert('Result is not null');
                        }
                        else {
                                $window.alert('Result is null');
                              }
                    }

It's does not works well, then please share your filter code. Bcs the problem should be there.

Upvotes: 1

Related Questions