AngularJS: фабрика и контроллер
Я новичок в 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
не определено... есть идеи почему?
Спасибо всем, кто может помочь!
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)...);
});
Ваша фабрика вернулась не туда, поэтому вернулась 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;
});
Вам нужно создать экземпляр сервиса, factory
возвращает конструктор... или вы можете использовать .service
вместо .factory