0

I have a list of checkboxes, which are dynamically built from getJson request.

<tr data-ng-repeat="(key, value) in relatedServices | orderBy:predicate:reverse | filter:search:strict">
 <td>
  <input type="checkbox" ng-model="array[$index]" ng-true-value="{{value.ID}}" ng-false-value="{{undefined}}" />
 </td>
<tr>

Then I would like to check some checkboxes and postJSON them.

Here is controller code:

var myApp = angular.module('myApp', []);


    myApp.controller('JsonController', function ($http, $scope) {


        $http.get("/RS/GETJSON/")
        .success(function (response) {
            $scope.relatedServices = response;
        });

        $scope.array = [];

        var values = $scope.array;
        var log = [];

        angular.forEach(values, function (value, key) {
            this.push('{Id' + ': ' + value + '}');
        }, log);


        $scope.add = function () {
            $http.post("/RS/POSTJSON/", log);
        }

    });

The problem is when I check the checkboxes, values are $scoped to the $scope.array = [];.

But when I run add(), the log = [] are empty.

How ever if I hardcode values in the script, lets say

$scope.array = ['1','2','3'];

This values do not disappear.

What I am doing wrong?

1 Answer 1

4

The problem with your code is timing, the $http.get is called but the success part is only called once the data is returned. In the meantime execution continues and when you do the forEach $scope.array is still empty. You can move the forEach into the add function but you should also check to see if the data has actually been returned.

var myApp = angular.module('myApp', []);


myApp.controller('JsonController', function ($http, $scope) {

    var hasLoaded = false;

    $http.get("/RS/GETJSON/")
    .success(function (response) {
        $scope.relatedServices = response;
        hasLoaded = true;
   });

   $scope.array = [];

   $scope.add = function () {
       if(!hasLoaded) {
           alert('Still waiting');
           return;
       }

       var values = $scope.array;
       var log = [];

       angular.forEach(values, function (value, key) {
          this.push('{Id' + ': ' + value + '}');
       }, log);


       $http.post("/RS/POSTJSON/", log);
    }

});
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, that's work for me! I wasn't even thinking about it. I am only 3 with AngularJS

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.