空角阵列

时间:2015-03-17 16:40:28

标签: arrays angularjs

我有一个复选框列表,这些复选框是从getJson请求动态构建的。

<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>

然后我想查看一些复选框和postJSON

这是控制器代码:

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);
        }

    });

问题是当我选中复选框时,$scoped的值为$scope.array = [];

但是当我运行add()时,log = []为空。

如果我在脚本中硬编码值,请说

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

此值不会消失。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

您的代码的问题是时间,$ http.get被调用但成功部分仅在返回数据时被调用。在此期间继续执行,当你执行forEach $ scope.array仍为空时。您可以将forEach移动到add函数中,但您还应该检查数据是否实际已经返回。

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);
    }

});