我有一个复选框列表,这些复选框是从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'];
此值不会消失。
我做错了什么?
答案 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);
}
});