0

考虑下面的一段代码。

在我的 AngularJS 应用程序中,当我用类别 [0] 填充 $scope.records 对象时,它们被链接在一起,我可以在视图中显示类别属性:

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;

...我“松开链接”并且实际上是在创建一个副本,因此该类别不会显示为“已选择”,因为:

$scope.records[0].category === $scope.categories[0]评估为假。

有什么办法解决这个问题吗?

在这种情况下,可能是一个非常愚蠢的问题:对不起:-)

4

2 回答 2

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;
  });
});
于 2013-10-17T15:40:26.050 回答
0

与其将完整的类别对象映射到记录中,不如将其映射为idor 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>
于 2013-10-17T15:41:25.497 回答