1

我是 Angular 新手,我正在尝试按照https://github.com/angular-app/angular-app构建我的应用程序

问题是当我定义我的工厂和控制器时...... app.service

angular.module("app.service", [])
.factory('currencyService', function ($http, $q) {
var getCurrency = function () {
    var deferred = $q.defer();

    $http({
        url: baseUrl + "currency/GetAll/",
        method: "GET"
    }).success(function (data) {
        deferred.resolve(data);
    }).error(function (data, status, headers, config) {

    });
    return deferred.promise;
}
});


controller :
angular.module('vendor.controller.edit',
[
  "acute.select",
  "ui.bootstrap",
  "ngRoute",
  "app.service"
])
.controller('vendorEditCtrl', ["$scope", "$routeParams", "$http", "$modal","currencyService", function ($scope, $routeParams, $http, $modal, currencyService)            {
...
}

问题是控制器内部currencyService未定义......知道为什么吗?

感谢任何可以提供帮助的人!!

4

3 回答 3

3

工厂是一种被调用来生成服务的方法,所以 Angular 调用它然后使用返回值来注册你的服务。在您的示例中,您没有返回函数本身。这应该可以解决问题:

.factory('currencyService', function ($http, $q) {
var getCurrency = function () {
    var deferred = $q.defer();

    $http({
        url: baseUrl + "currency/GetAll/",
        method: "GET"
    }).success(function (data) {
        deferred.resolve(data);
    }).error(function (data, status, headers, config) {

    });
    return deferred.promise;
};
return getCurrency;
});

请注意,我在最后添加了实际返回函数的行。

它的定义方式,然后你会这样称呼它:

.controller("myController", ["currencyService", function(currencyService) {
   currencyService().then(function(result)...);
});
于 2014-02-12T13:49:52.527 回答
1

你的工厂返回错误的地方,所以它返回undefined

你应该这样做:

angular.module("app.service", [])
.factory('currencyService', function ($http, $q) {
    var deferred = $q.defer(),
        getCurrency = function () {

        $http({
            url: baseUrl + "currency/GetAll/",
            method: "GET"
        }).success(function (data) {
            deferred.resolve(data);
        }).error(function (data, status, headers, config) {
        });
    })

return deferred.promise;
});
于 2014-02-12T12:40:15.960 回答
0

您需要实例化服务,factory返回构造函数......或者您可以使用.service而不是.factory

于 2014-02-12T12:33:12.963 回答