首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包括AngularJs模块中的外部工厂

包括AngularJs模块中的外部工厂
EN

Stack Overflow用户
提问于 2014-08-20 17:32:25
回答 2查看 4K关注 0票数 1

我想创建一个工厂来抽象我的$http调用。我想在多个模块中使用这个工厂,但我只想维护文件的一个副本。

我看到我在用kendo.directives做类似的事情

代码语言:javascript
运行
复制
angular.module('createPolicy', ['kendo.directives'])
    .controller('CreatePolicyController', ['$scope', function ($scope) {

我如何创建我的工厂,以便在我包含了kendo.directives源代码之后,能够像.js一样简单地包含它?

例如:

代码语言:javascript
运行
复制
angular.module('createPolicy', ['kendo.directives', 'myPolicyService'])
    .controller('CreatePolicyController', ['$scope', function ($scope) {

我要如何建造工厂才能这样使用它呢?

编辑:,我有以下的角因子: in:

代码语言:javascript
运行
复制
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;
                      });
        }
    }
});

然后,在另一个文件中,我尝试这样使用它:

代码语言:javascript
运行
复制
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中):

代码语言:javascript
运行
复制
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"));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 17:39:52

你会定义你自己的模块。

代码语言:javascript
运行
复制
var specialHttpModule = angular.module("specialHttpModule", []);
specialHttpModule.service("someSpecialService", someSpecialService);

这将在这个模块的.js文件中。然后,您将能够将它作为依赖项包括进来,或者使用angular.module("specialHttpModule");检索它以将其添加到您的createPolicy模块中,您需要将模块名添加到依赖项列表中:

代码语言:javascript
运行
复制
angular.module('createPolicy', ['kendo.directives', 'specialHttpModule'])

然后,在specialHttpModule中声明的所有服务、指令和控制器都可以在您的模块中插入:

代码语言:javascript
运行
复制
.controller('CreatePolicyController', ['$scope', 'someSpecialService',
    function ($scope, someSpecialService) {
票数 4
EN

Stack Overflow用户

发布于 2014-08-20 18:22:41

不要使用servicefactory,而是在返回的对象上使用Provider版本的get属性,并在config部分的多个模块中配置相同的提供程序

工厂:

代码语言:javascript
运行
复制
angular.module('myApp')
 .factory('myService', function() {
 return {
     'username': 'auser',
     'url': ''
      'setUrl': function(inputUrl){
          this.url = inputUrl;
      }
 }
})

等效提供者:

代码语言:javascript
运行
复制
var appProvider = angular.module('appProvider', []);
    appProvider.provider('myService', {
        $get: function() {
          return {
             'username': 'auser',
             'url': ''
             'setUrl': function(inputUrl){
                 this.url = inputUrl;
              }
          }
        }
     });

在多个模块中配置提供程序:

模块1:

代码语言:javascript
运行
复制
angular.module('myApp', ['appProvider'])
 .config(function(myServiceProvider) {
     myServiceProvider
         .setUrl("stackoverflow.com");
});

模块2:

代码语言:javascript
运行
复制
angular.module('secondApp', ['appProvider'])
 .config(function(myServiceProvider) {
     myServiceProvider
         .setUrl("google.com");
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25411026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档