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 没有抛出任何错误,但这并不意味着您的代码没问题。
我正在使用 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 没有抛出任何错误,但这并不意味着您的代码没问题。