Javascript 如何使用AngularJS和RequireJS从外部文件注入服务?
我从外部文件注入控制器,我想从外部文件为服务做同样的事情。应在工厂报表中登记 控制器的工作原理 控制器 authCtrl 现在我想注入服务 服务 授权服务 当authController调用Javascript 如何使用AngularJS和RequireJS从外部文件注入服务?,javascript,angularjs,dependency-injection,requirejs,Javascript,Angularjs,Dependency Injection,Requirejs,我从外部文件注入控制器,我想从外部文件为服务做同样的事情。应在工厂报表中登记 控制器的工作原理 控制器 authCtrl 现在我想注入服务 服务 授权服务 当authController调用authService.login(…)时,它抛出错误错误:[$injector:undef]提供程序“authService”必须从$get factory方法返回一个值。 这段代码的灵感来自project。正如它所说,Angular的factory()将返回服务对象。你可能会有这样的运气: define(
authService.login(…)
时,它抛出错误错误:[$injector:undef]提供程序“authService”必须从$get factory方法返回一个值。
这段代码的灵感来自project。正如它所说,Angular的
factory()
将返回服务对象。你可能会有这样的运气:
define(['angular'], function (angular) {
angular.module('vcApp.services', [])
.factory('AuthService', ['$http', '$injector', function($http, $injector) {
var stub = {};
require(['auth/authService'], function(authService) {
angular.extend(stub, $injector.invoke(authService, this, {'$http': $http}));
});
return stub;
}]);
});
在这里,您为服务定义一个存根,并在服务实际延迟加载时对其进行扩展
(顺便说一下,$injector.invoke()
的最后两个参数在本例中是多余的。)
如果您想了解关于混合RequireJS和Angular的另一个想法,这对延迟加载和r.js优化器很好,您可以看看
define([], function() {
return ['$scope', '$routeParams', '$location', '$http', 'AuthService', function($scope, $routeParams, $location, $http, authService) {
$scope.signIn = function() {
...
}
$scope.$apply();
}];
});
'use strict';
define(['angular'], function (angular) {
angular.module('vcApp.services', [])
.factory('AuthService', ['$http', '$injector', function($http, $injector) {
require(['auth/authService'], function(authService) {
$injector.invoke(authService, this, {'$http': $http});
});
}]);
});
define([], function() {
return ['$http', function ($http) {
return {
login: login
};
function login(username, password) {
var request = $http(...);
return(request);
}
}]
});
define(['angular'], function (angular) {
angular.module('vcApp.services', [])
.factory('AuthService', ['$http', '$injector', function($http, $injector) {
var stub = {};
require(['auth/authService'], function(authService) {
angular.extend(stub, $injector.invoke(authService, this, {'$http': $http}));
});
return stub;
}]);
});