4

当我升级 ng-repeat 需要非常长的时间来加载并尝试显示更多内容框而没有 $resource 提供的内容。

我已将问题缩小到 1.1.0 和 1.1.1 之间的更新。我查看了更新日志,但没有任何内容显示我是罪魁祸首,但它一定在里面。

变更日志 => https://github.com/angular/angular.js/blob/master/CHANGELOG.md#111-pathological-kerning-2012-11-26

此应用程序的存储库 => https://github.com/brianpetro/resume

目前我的角度看起来像:

app = angular.module("Resume", ["ngResource"])

app.factory "Entry", ["$resource", ($resource) ->
  $resource("/entries")
]

@EntryCtrl = ["$scope", "Entry", ($scope, Entry) ->
  $scope.entries = Entry.query()
]

这发生在使用 ng-repeat 的多个视图上:

<html ng-app="Resume">
  <div ng-controller="EntryCtrl">
    <ul>
      <li ng-repeat="entry in entries">
        {{entry.title}}
      </li>
    </ul>
  </div>
</html>

这是 AngularJS 版本 1.1.0: 这是 AngularJS 版本 1.1.0 这是 AngularJS 版本 1.1.1: 这是 AngularJS 版本 1.1.1

4

2 回答 2

8

您必须添加 .json 并不完全正确——至少从我从 1.0.x 切换到 1.1.x 时的经验来看是这样。

为了使 Rails 应用程序返回 json 而无需在 Angular 1.1.x 的 URL 中指定扩展名,您需要使 Angular 向 http 请求添加额外的标头:

myModule.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}]);

没有那个 Rails 默认会渲染整个 HTML 而不是返回 JSON。

Github问题反映了这一点

于 2013-04-07T20:43:19.183 回答
0

答案在 URL 文件扩展名中。从 Angular 1.1.1 版开始,需要在资源中包含“.json”。

 app = angular.module("Resume", ["ngResource"])

 app.factory "Entry", ["$resource", ($resource) ->
-  $resource("/entries")
+  $resource("/entries.json", {}, {}, {})
 ]

 app.factory "Done", ["$resource", ($resource) ->
-  $resource("/dones", {}, {update: {method: "PUT"}})
+  $resource("/dones.json", {}, {update: {method: "PUT"}}, {})
 ]

 app.factory "Resource", ["$resource", ($resource) ->
-  $resource("/resources", {}, {})
+  $resource("/resources.json", {}, {}, {})
 ]

有人可以澄清这是因为我的 Rails 4 后端还是新的 Angular 要求?

于 2013-04-07T20:21:17.710 回答