考虑下面的代码段。
我的AngularJS应用程序,当我用类别[0]填充$ scope.records'对象时,它们被链接在一起,我可以在我的视图中显示category属性:
JS:
$scope.categories = [{
title: 'Category 1'
}, {
title: 'Category 2'
}];
$scope.records = [{title: 'New record', category: $scope.categories[0]}];
HTML:
<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category in categories"></select>
但是:当我对对象数组进行字符串化然后再解析它时......
var json = JSON.stringify($scope.records);
var parsedJson = JSON.parse(json);
$scope.records = parsedJson;
......我'松开了链接'而且我实际上是创建了一个副本,因此该类别没有显示为'selected',因为:
$scope.records[0].category === $scope.categories[0]
评估为假。
有想法解决这个问题吗?
在这种情况下,可能是一个非常愚蠢的问题:对不起: - )
答案 0 :(得分:0)
尝试
$scope.$apply(function() {
$scope.records = parsedJson;
});
简而言之,在您的示例中,angularjs不知道某些内容已被更改,您必须通过$scope.$apply
调用通知它。检查http://docs.angularjs.org/api/ng。$ rootScope.Scope
这个例子非常类似于我们尝试通过angularjs之外的ajax调用为范围分配一个变量,例如使用纯jquery get方法。在这种情况下,我们做了类似(伪代码)的事情:
$.get("/api/something.json", function(results) {
$scope.$apply(function() {
$scope.records = results;
});
});
答案 1 :(得分:0)
不是将完整的类别对象映射到记录中,而是将其映射到id
或name
,如果将序列化为json并返回
$scope.records = [{title: 'New record', category: $scope.categories[0].id}];
选择表达式变为
<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category.id in categories"></select>