我写了一个Angular工厂。对我来说有一个严重的错误。我徘徊修复它。最后,我清除了这个问题......没有理由。所以我需要清楚地描述下面的代码问题。
这是我的代码A:
angular
.module('BinD', ['ngSails'])
.factory('UserService', function ($sails) {
...
});
另一个B是:
(function (angular) {
'use strict';
angular
.module('BinD', ['ngSails'])
.factory('UserService', function ($sails) {
...
});
})(angular);
错误部分是:
(function (angular) {
'use strict';
angular
.module('BinD', ['ngSails'])
.controller('SignUpCtrl', function ($scope, $window, UserService) {
代码B效果很好。代码一个错误消息“UserServiceProvider未知(可能?)”。我真的不知道为什么前面提到的两个相同的代码工作方式不同。让我知道。
答案 0 :(得分:3)
在函数中包含。factory
调用应该没有任何区别。我认为你必须做出不同的改变。
在您的第三个代码段中,当您使用两个参数调用.module
时,您将创建一个新模块。这将覆盖您在“代码A”或“代码B”中创建的模块。
您没有重复使用相同的模块,而是创建一个新模块。因此,新模块上的UserService不存在是有道理的。
您的上一个代码段应仅使用一个参数调用.module('BinD')
。只是您要使用的模块的名称。
angular
.module('BinD')
.controller('SignUpCtrl', function ($scope, $window, UserService) {
<小时/>
另一种选择是,您只需拨打.module
一次,然后保存即可。
var app = angular.module('BinD', ['ngSails']);
之后您可以致电app.controller
或app.factory
,而无需担心语法问题。
答案 1 :(得分:2)
在您的代码A 或代码B 中,您创建了一个模块BinD
,其依赖关系为ngSails
,然后您就是使用该模块注册工厂,但代码A 将在全局范围内声明变量,如果您正在使用它并且代码B 将使用IIFE模式进行编码,这将使您的变量仅在声明的函数内可用。但这与你得到的错误无关。
在您的控制器中,您想要使用该工厂,但在创建controller
时,您不应该像创建angular.module('BinD', ['ngSails'])
那样创建新模块,这将刷新以前注册的工厂(或使用BinD
模块的其他组件)将创建一个名为BinD
的新模块。这就是为什么在控制器中注入UserService
之后会抛出$injector
错误,因为UserService
在该模块中不可用。
<强>控制器强>
(function (angular) {
'use strict';
angular
.module('BinD') //<- utilizing already created module
.controller('SignUpCtrl', function ($scope, $window, UserService) {