$$hashkey显示在ng-repeat输出中
$$hashkey显示在ng-repeat输出中
我的ng-repeat指令中的一列输出了$$hashkey的值。\n我不知道这是怎么发生的。我从一个简单的GET请求获取数据,并在成功回调中检查该数据时,发现每个对象中都插入了$$hashkey。我知道$$hashkey是angular使用的,但在HTML视图输出方面从来没有发生过这种情况。\n这是在1.2.16版本上的。\nHTTP GET:\n
$http.get('index.php/getWorkbook/'+$routeParams.workbook).success(function(data) { console.log(data); // 插入了$$hashkey $scope.workbook = data; });
\nHTML:\n
\n这是控制器函数。\n
$scope.notSorted = function(obj){ if (!obj) { return []; } return Object.keys(obj); }
问题的原因是在ng-repeat中,当使用track by表达式时,会在ng-repeat输出的内容中显示出$$hashkey。$$hashkey是AngularJS内部用于跟踪对象的特殊属性。
解决方法是在controller中对$scope.workbook进行深拷贝操作,可以使用angular.toJson和angular.fromJson来实现。这样做的目的是将$scope.workbook对象转换为字符串,然后再将其转换为新的对象,从而去除掉$$hashkey属性。
具体的解决方法如下所示:
$scope.workbook = data; $scope.workbook = angular.fromJson(angular.toJson($scope.workbook));
这样,当ng-repeat输出$scope.workbook时,就不会再显示出$$hashkey了。
在使用ng-repeat指令时,有时会出现($$hashkey showing up in ng-repeat output)的问题。这个问题的出现是由于在ng-repeat循环中,行数据不喜欢通过notSorted()方法进行传递。解决这个问题的方法是添加angular.copy()方法。
具体的解决方法如下:
$scope.notSorted = function(obj){ obj = angular.copy(obj); if (!obj) { return []; } return Object.keys(obj); }
通过上述代码,将obj对象通过angular.copy()方法进行复制,然后再传递给notSorted()方法。这样可以解决($$hashkey showing up in ng-repeat output)的问题。