首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angularjs -工厂不在外部文件中工作

Angularjs -工厂不在外部文件中工作
EN

Stack Overflow用户
提问于 2015-03-25 23:02:23
回答 1查看 774关注 0票数 1

因此,这个问题似乎只发生在我将一个工厂转移到一个外部文件时,而我真的很困惑为什么。将指令、控制器和过滤器提取到外部文件不会破坏我的应用程序。我会展示我在下面做什么。

我创建我的app.js,命名模块,注入我的各种依赖项,继续我的配置,并创建我的工厂。

代码语言:javascript
运行
复制
---- 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) { ... }]);

我没有问题进入我的工厂在我的控制器这样。

代码语言:javascript
运行
复制
---- controller.js ------

angular.module('myApp')
  .controller('myController', function(myFactory){
    myFactory.method() // works just fine
  });

另一种选择是:

代码语言:javascript
运行
复制
---- controller.js ------

angular.module('myApp')
  .controller('myController', [ 'myFactory', function(myFactory){
    myFactory.method() // also works just fine
  }]);

不确定哪种语法是“正确的”,但我总是尝试这两种语法,它们都工作得很好。

...Now,如果我从app.js中删除.factory并将其移动到myFactory.js (在index.html中链接)就是问题发生的地方。

代码语言:javascript
运行
复制
----- myFactory.js -----
angular.module('myApp')
  .factory('myFactory', function($http) { ... }); // also attempted with [ ] syntax

这个应用程序在刷新后无法加载,我收到了一个pnpr错误。

我试过:

  • 将$http从工厂中移除,并将工厂保留为空,以确保我没有从工厂中返回坏代码。
  • 将myFactory.js的angular.module改为read angular.module('myFactory',[]);angular.module('myFactory').factory('api',[$http‘,function($http){ . });

然后在app.js中注入“myFactory”作为依赖..。我犯了一些不同的错误:

未知错误:$injector:modulerr未能实例化模块crema.app,原因是:错误:$injector:modulerr无法实例化模块myFactory,原因是:错误:$injector:nomod模块'myFactory‘不可用!您要么拼错了模块名,要么忘记加载它。如果注册一个模块,请确保将依赖项指定为第二个参数。errors.angularjs.org/1.3.15/$injector/nomod?p0=myFactory

  • 装载myFactory.js 1,2,9,最后.在index.html中,认为装载顺序可能很重要吗?但事实并非如此。
  • 还有其他一些小的句法变化。似乎没有什么能真正帮助我,或者改变我的错误。

不太确定还能尝试什么。就像我说的,工厂在app.js内部正常工作,所有控制器、指令等在外部文件中都能正常工作.只是不是这个工厂。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-03-26 01:10:20

问题是AngularJS不允许您在其引导之后注册工厂。为了使其工作,您应该在您的配置函数中执行以下操作:

代码语言:javascript
运行
复制
var app = angular.module('app', [...]);
app.config(function($provide) {
    app.factory = function(name, factory) {
        $provide.factory(name, factory);
    };
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29268142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档