【问题标题】:How to call my factory service correctly?如何正确调用我的工厂服务?
【发布时间】:2015-08-02 23:49:29
【问题描述】:

我在尝试调用我的服务时收到“不是函数”错误。 NgResource 已经被注入。我做错了什么?

controller.js:

app.controller('controllerA', ['$scope', 'CustomizingService', 
    function($scope, CustomizingService) {
        $scope.cust = CustomizingService.Customizing.squares({numberOf: 2, valid: true});
}]);

service.js:

(function () {

    angular.module('ST_CCG').factory('CustomizingService', ['$resource', function ($resource) {
        //var url = config.CustomizingAPI_Url + '/Customizing/:link/';
        var url = 'http://localhost:54483/BusinessService.svc/:link/';

        return {
            Customizing: $resource(url,  {
                squares: {
                    method: 'GET',
                    params: { link: 'GetSquares', numberOf: '@numberOf', valid: @valid },
                    isArray: true },
                 circles: {
                    method: 'GET',
                    params: { link: 'GetCircles',  valid: true },
                    isArray: true }
            })
        };
    }]);
})();

编辑

我正在使用 chrome 调试器并收到以下错误: TypeError:CustomizingService.Customizing.orders 不是函数

app.js:

var app = angular.module('ST_CCG', [
  'ngRoute',
  'ngResource'
])
.config(['$routeProvider', 
        function ($routeProvider) {
            $routeProvider.
                when('/menu', {
                    templateUrl: 'Modules/Menu/view.html',
                    controller: 'controllerA'
                }).
                when('/orders', {
                    templateUrl: 'Modules/Orders/view.html',
                    controller: 'controllerB'
                }).
                otherwise({
                    redirectTo: '/'
                });
        }
]);

index.html:

...
<!--MODOLE + CONTROLLER Resources-->
<script src="app.js"></script>
<script src="service.js"></script>
<script src="modules/menu/controller.js"></script>
<script src="modules/orders/controller.js"></script>
</head>

<body ng-app="ST_CCG">

<a href="#/menu">Menu</a>
<a href="#/orders">Orders</a>

<div ng-view></div>

</body>

【问题讨论】:

  • 你得到错误了吗?
  • 加载网站时,让我更新我的问题。我正在使用 chrome 调试器。
  • 看到angular.module(onlyOneArgument)时总是很担心。似乎是许多问题的原因

标签: javascript angularjs ngresource


【解决方案1】:

这可能是因为您将 actions 传递到 default params 所在的位置。改成

Customizing: $resource(url, {valid: true}, {
    squares: // etc

我使用valid: true 作为默认参数,因为您似乎在这两个操作中都使用了它。

【讨论】:

  • 收到此错误:XMLHttpRequest 无法加载 localhost:54483/BusinessService.svc... 请求的资源上不存在“Access-Control-Allow-Origin”标头。 HTTP 状态码 500。我将 webstorm 用于前端,将 Visual Studio 用于后端。我通过 IIS 服务器启动了该服务。你能帮帮我吗?
  • 您的 API 需要 CORS 标头,但这可能只是因为它出错了。检查您的 API 日志
  • 现在使用 Chrome 的 CORS 扩展。目前我在资源配置中收到错误错误错误操作customers。预期响应包含一个数组,但在调用该方法时获得了一个对象。更改 isArray: false 没有帮助。
  • 我开了一个新问题:stackoverflow.com/questions/30383930/…,有时间请看一下
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多