因此,这个问题似乎只发生在我将一个工厂转移到一个外部文件时,而我真的很困惑为什么。将指令、控制器和过滤器提取到外部文件不会破坏我的应用程序。我会展示我在下面做什么。
我创建我的app.js,命名模块,注入我的各种依赖项,继续我的配置,并创建我的工厂。
---- app.js -----
angular
.module('myApp', [
'ngAnimate',
'ngCookies',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch',])
.config(function ($routeProvider, $locationProvider, $httpProvider) { ... })
.factory('myFactory', function($http){ ... });
// also works with .factory('myFactory', ['$http', function($http) { ... }]);我没有问题进入我的工厂在我的控制器这样。
---- controller.js ------
angular.module('myApp')
.controller('myController', function(myFactory){
myFactory.method() // works just fine
});另一种选择是:
---- controller.js ------
angular.module('myApp')
.controller('myController', [ 'myFactory', function(myFactory){
myFactory.method() // also works just fine
}]);不确定哪种语法是“正确的”,但我总是尝试这两种语法,它们都工作得很好。
...Now,如果我从app.js中删除.factory并将其移动到myFactory.js (在index.html中链接)就是问题发生的地方。
----- myFactory.js -----
angular.module('myApp')
.factory('myFactory', function($http) { ... }); // also attempted with [ ] syntax这个应用程序在刷新后无法加载,我收到了一个pnpr错误。
我试过:
然后在app.js中注入“myFactory”作为依赖..。我犯了一些不同的错误:
未知错误:$injector:modulerr未能实例化模块crema.app,原因是:错误:$injector:modulerr无法实例化模块myFactory,原因是:错误:$injector:nomod模块'myFactory‘不可用!您要么拼错了模块名,要么忘记加载它。如果注册一个模块,请确保将依赖项指定为第二个参数。errors.angularjs.org/1.3.15/$injector/nomod?p0=myFactory
不太确定还能尝试什么。就像我说的,工厂在app.js内部正常工作,所有控制器、指令等在外部文件中都能正常工作.只是不是这个工厂。任何帮助都将不胜感激。
发布于 2015-03-26 01:10:20
问题是AngularJS不允许您在其引导之后注册工厂。为了使其工作,您应该在您的配置函数中执行以下操作:
var app = angular.module('app', [...]);
app.config(function($provide) {
app.factory = function(name, factory) {
$provide.factory(name, factory);
};
});https://stackoverflow.com/questions/29268142
复制相似问题