我是棱角分明的新手,我正在尝试按照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
内部未定义...
知道为什么吗?
感谢所有能提供帮助的人!!
答案 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