AngularJS:工厂和控制器

时间:2014-02-12 12:28:13

标签: javascript angularjs angularjs-factory

我是棱角分明的新手,我正在尝试按照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内部未定义... 知道为什么吗?

感谢所有能提供帮助的人!!

3 个答案:

答案 0 :(得分: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)...);
});

答案 1 :(得分: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;
});

答案 2 :(得分:0)

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