【问题标题】:Angular JS Fails After Upgrade from 1.1.0 to 1.1.1Angular JS 从 1.1.0 升级到 1.1.1 后失败
【发布时间】:2013-04-04 12:24:56
【问题描述】:

当我升级 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.1:

【问题讨论】:

  • /echo/json 正在返回 {} 所以我不得不用模型替换你的资源(使用超时)。我看不出 ng-repeat 有任何问题。 Fiddle.

标签: javascript angularjs angularjs-ng-repeat angular-resource


【解决方案1】:

您必须添加 .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 issue reflecting that

【讨论】:

  • 它不适合您的示例吗?如果您的 JSON 服务在某处可用,请使用您的 Angular 代码创建一个 plunker,我可以向您展示应该更改的内容。添加此标头适用于 Rails 3.2 和 Angular 1.1.4。正如它在 Github 问题 github.com/angular/angular.js/issues/1004 中所写的那样 - Rails 需要标头才能返回 JSON(如果您未指定 .json 扩展名)。您的其他选择只是在 Rails 控制器中仅返回 JSON - 所以而不是 respond_to 做 |format| ...和不同格式的不同动作只是渲染:json
【解决方案2】:

答案在 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 要求?

【讨论】:

  • 这是角度要求。我刚刚在下面发布了答案
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2017-10-20
  • 2019-10-16
相关资源
最近更新 更多