如何从模块实例获取服务实例
我有一些模块定义和服务,如下面的模块
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; });
现在在另一个脚本我可以访问模块
services=angular.module('app.services')
但是我怎样才能从该模块获得服务实例
apiService=angular.module('app.services').service('ApiService')
编辑:
在阅读并理解了作者的评论之后,如果用户不被允许的话,他实际上是想阻止整个应用程序。 他希望通过重复使用在他的ApiService
工厂中编写的相同代码来完成。
–
你可以'hook'到你的控制器之前调用的app.run函数,你可以利用$window.location.href
将用户重定位到另一个页面或站点(如果不允许的话)
Iv'e用app.run
条目更新了这个运动员
app.js
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 });
原版的:
我做了这个笨蛋
如果您将所有逻辑分隔到api.services
模块,请将其包含在您的应用程序中
app.js
var app = angular.module('app', ['app.services']);
那么你可以通过引用所需的工厂 – ApiService
来使用它
app.controller('myCtrl', ['$scope', 'ApiService', function($scope, ApiService) { $scope.result = ApiService.request(); } ]);
app.services.js
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; });
plunker