javascript - How to inject service from external file using AngularJS and RequireJS? -
i'm injecting controller external file , want same thing service external file. should registered in mill statement.
injecting of controller working
controllers
'use strict'; define(['angular', 'services'], function (angular) { homecoming angular.module('vcapp.controllers', ['vcapp.services']) .controller('authctrl', ['$scope', '$injector','authservice', function($scope, $injector, authservice) { require(['auth/authctrl'], function(authctrl) { $injector.invoke(authctrl, this, {'$scope': $scope, 'authservice':authservice}); }); }]); }); authctrl
define([], function() { homecoming ['$scope', '$routeparams', '$location', '$http', 'authservice', function($scope, $routeparams, $location, $http, authservice) { $scope.signin = function() { ... } $scope.$apply(); }]; }); and want inject service
services
'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}); }); }]); }); authservice
define([], function() { homecoming ['$http', function ($http) { homecoming { login: login }; function login(username, password) { var request = $http(...); return(request); } }] }); when authcontroller calls authservice.login(...), throws error error: [$injector:undef] provider 'authservice' must homecoming value $get mill method..
this code inspired angular-requirejs-seed project.
as says, angular's factory() expected homecoming service object. may have luck like:
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})); }); homecoming stub; }]); }); here define stub service , extend it, when service lazy-loaded.
(by way think lastly 2 arguments of $injector.invoke() redundant in case.)
if want thought mixing requirejs , angular, plays lazy loading , r.js optimizer, may take @ angular-require-lazy.
javascript angularjs dependency-injection requirejs
No comments:
Post a Comment