如何从模块实例中获取服务实例 [Angular]

19 浏览
0 Comments

如何从模块实例中获取服务实例 [Angular]

我定义了一些模块和相关的服务,如下所示:\n

var services = angular.module('app.services', []);
services.factory('ApiService', function($http,$cookies,UserService){
    var dataFactory = {};
    dataFactory.request=function(url,data,next){
        return "Hi";
    };
    return dataFactory;
});

\n现在在另一个脚本中,我可以访问该模块,如下所示:\n

services = angular.module('app.services')

\n但是,我如何从该模块中获取服务实例呢?像下面这样:\n

apiService = angular.module('app.services').service('ApiService')

0
0 Comments

问题背景:在这个问题中,提问者想要在Angular应用程序初始化之前检查某些条件,并根据条件决定是否允许应用程序运行。他想要使用自己编写的ApiService工厂中的代码来实现这一点。

解决方法:为了实现这个目的,提问者可以使用Angular的app.run函数,该函数在控制器之前调用,并且可以使用$window.location.href将用户重定向到另一个页面或站点(如果不允许)。

在app.js中,可以使用以下代码将app.run函数添加到应用程序中:

var app = angular.module('app', ['app.services']);
app.run(function(ApiService, $window) {
  result = ApiService.request();
  // This is where you check your permissions
  var has_permissions = false;
  // ...
  if (!has_permissions) {
    alert('being transferred to plnkr.co due to lack of permissions');
    $window.location.href = 'http://plnkr.co/';
  }
  // Otherwise, continue normally
});

这样做之后,当应用程序启动时,将会调用ApiService.request()函数,并在检查权限后决定是否允许应用程序继续运行。

原始解决方案:在原始的问题中,提问者将所有逻辑分离到了名为api.services的模块中,并在应用程序中引用了该模块。然后,他可以在控制器中通过引用所需的工厂(ApiService)来使用该模块。

以下是他的代码示例:

var app = angular.module('app', ['app.services']);
app.controller('myCtrl', ['$scope', 'ApiService',
  function($scope, ApiService) {
    $scope.result = ApiService.request();
  }
]);
var services = angular.module('app.services', []);
services.factory('UserService', function() {
  var UserService = {};
  UserService.foo = function() {
    return "foo";
  };
  return UserService;
});
services.factory('ApiService', function($http, UserService) {
  var ApiService = {};
  ApiService.request = function(url, data, next) {
    return UserService.foo() + " Hi";
  };
  return ApiService;
});

通过这种方式,可以在控制器中使用ApiService,并调用ApiService.request()函数来获取服务实例。

通过在应用程序启动前使用app.run函数,并在其中检查权限,可以实现在Angular应用程序初始化之前决定是否允许应用程序运行的功能。通过将逻辑分离到单独的服务模块中,并在控制器中引用该模块,可以实现获取服务实例的需求。

0