我想创建一个工厂来抽象我的$http
调用。我想在多个模块中使用这个工厂,但我只想维护文件的一个副本。
我看到我在用kendo.directives
做类似的事情
angular.module('createPolicy', ['kendo.directives'])
.controller('CreatePolicyController', ['$scope', function ($scope) {
我如何创建我的工厂,以便在我包含了kendo.directives
源代码之后,能够像.js
一样简单地包含它?
例如:
angular.module('createPolicy', ['kendo.directives', 'myPolicyService'])
.controller('CreatePolicyController', ['$scope', function ($scope) {
我要如何建造工厂才能这样使用它呢?
编辑:,我有以下的角因子: in:
var policyService = angular.module("PolicyService", []);
policyService.factory('PolicyService', function ($http) {
return {
getFoos: function () {
//return the promise directly.
return $http.get('/foos')
.then(function (result) {
//resolve the promise as the data
return result.data;
});
}
}
});
然后,在另一个文件中,我尝试这样使用它:
angular.module('createPolicy', ['kendo.directives', 'PolicyService'])
.controller('CreatePolicyController', ['$scope', function ($scope, policyService) {
$scope.editPolicy = true;
$scope.packages = [];
console.log(policyService.getFoos());
但是,我明白这个错误:
TypeError:无法读取未定义的属性“getFoos”
我包括这样的文件(在ASP.NET MVC中):
bundles.Add(new ScriptBundle("~/bundles/jqueryplugins").Include(
"~/Scripts/angular.min.js",
"~/Scripts/angular-factories.js",
"~/Scripts/kendo.all.min.js",
"~/Scripts/kendo.aspnetmvc.min.js"));
发布于 2014-08-20 17:39:52
你会定义你自己的模块。
var specialHttpModule = angular.module("specialHttpModule", []);
specialHttpModule.service("someSpecialService", someSpecialService);
这将在这个模块的.js
文件中。然后,您将能够将它作为依赖项包括进来,或者使用angular.module("specialHttpModule");
检索它以将其添加到您的createPolicy
模块中,您需要将模块名添加到依赖项列表中:
angular.module('createPolicy', ['kendo.directives', 'specialHttpModule'])
然后,在specialHttpModule
中声明的所有服务、指令和控制器都可以在您的模块中插入:
.controller('CreatePolicyController', ['$scope', 'someSpecialService',
function ($scope, someSpecialService) {
发布于 2014-08-20 18:22:41
不要使用service
或factory
,而是在返回的对象上使用Provider
版本的get
属性,并在config
部分的多个模块中配置相同的提供程序
工厂:
angular.module('myApp')
.factory('myService', function() {
return {
'username': 'auser',
'url': ''
'setUrl': function(inputUrl){
this.url = inputUrl;
}
}
})
等效提供者:
var appProvider = angular.module('appProvider', []);
appProvider.provider('myService', {
$get: function() {
return {
'username': 'auser',
'url': ''
'setUrl': function(inputUrl){
this.url = inputUrl;
}
}
}
});
在多个模块中配置提供程序:
模块1:
angular.module('myApp', ['appProvider'])
.config(function(myServiceProvider) {
myServiceProvider
.setUrl("stackoverflow.com");
});
模块2:
angular.module('secondApp', ['appProvider'])
.config(function(myServiceProvider) {
myServiceProvider
.setUrl("google.com");
});
https://stackoverflow.com/questions/25411026
复制相似问题