Angular $resource 在 IE11 中不工作

Angular $resource not working in IE11

我正在使用 angular 并且我正在使用 $resource 在 MVC 中向我的控制器发出请求。我 运行 遇到一个问题,它在 IE11 中不起作用。适用于 chrome 和 firefox。

我有一个 homeController.js,在这个 $scope 中,它在到达 div

时在 ng-init 上被调用
  $scope.getUserShortcuts = function () {
                    $scope.shortcuts = usersService.getUserShortcuts(11); 
                }

这叫我的userService.js

(function () {
    "use strict";

    var myAppModule = angular.module('myApp');

    myAppModule.factory('usersService', ['$resource', function ($resource) {
        console.log("load it");

        // user = controller, getusershortcuts = method, :userId = param
        var userShortcuts = $resource('/user/shortcuts/11', null,
        {
            'get': { method: 'GET', isArray:true }
        });

            getUserShortcuts: function (userId) {
                alert("test");
                return userShortcuts.query(userId);
            }

        };
    }]);
})();

我的警报被调用,但 IE11 甚至没有尝试进行 GET。

这是我的错误:

TypeError: Object.keys: argument is not an Object
   at extend (http://localhost:45669/Scripts/angular.js:412:7)
   at Resource[name] (http://localhost:45669/Scripts/angular-resource.js:574:13)
   at getUserShortcuts (http://localhost:45669/Scripts/app/services/userService.js:94:17)
   at $scope.getUserShortcuts (http://localhost:45669/Scripts/app/controllers/homeController.js:171:21)
   at $parseFunctionCall (http://localhost:45669/Scripts/angular.js:12331:7)
   at Scope.prototype.$eval (http://localhost:45669/Scripts/angular.js:14383:9)
   at pre (http://localhost:45669/Scripts/angular.js:23851:9)
   at invokeLinkFn (http://localhost:45669/Scripts/angular.js:8213:9)
   at nodeLinkFn (http://localhost:45669/Scripts/angular.js:7701:11)
   at compositeLinkFn (http://localhost:45669/Scripts/angular.js:7075:13) <div class="row" ng-init="getUserShortcuts(11)">
value= undefined

有人知道问题出在哪里吗?

可以安全地假设 userId 不是一个对象,但它必须是。此外,您的资源 URL 没有参数,所以我想知道您是否真的要传递 userId 或 URL 不正确。在任何情况下,正确的调用应该是这样的:

getUserShortcuts: function (userId) {
            alert("test");
            return userShortcuts.query({userId: userId});

IE 行为不同的原因是因为 Chrome 显然具有 Object.keys 的 ES6 兼容实现,它将 userId 转换为其对象形式,而 ES5 兼容实现,如在 IE 中,抛出 TypeError。请注意,虽然 Chrome 没有抛出任何错误,但这并不意味着您的代码没问题。