Javascript 作为全局变量的角度和参数之间的差异?
我写了一本书。我犯了一个严重的错误。我徘徊着去修理它。最后,我解决了这个问题。。。没有理由。所以我需要下面的代码问题明确的描述 这是我的代码A:Javascript 作为全局变量的角度和参数之间的差异?,javascript,angularjs,Javascript,Angularjs,我写了一本书。我犯了一个严重的错误。我徘徊着去修理它。最后,我解决了这个问题。。。没有理由。所以我需要下面的代码问题明确的描述 这是我的代码A: angular .module('BinD', ['ngSails']) .factory('UserService', function ($sails) { ... }); 另一个B是: (function (angular) { 'use strict'; angular
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未知(可能?)”的代码。我真的不知道为什么两个相同的代码工作方式不同。让我知道。在您的代码A或代码B的两部分中,您创建了一个依赖于
ngSails
的模块BinD
,然后向该模块注册工厂,但是代码A将全局声明一个变量,如果您正在使用它&代码B将使用IIFE模式进行编码,这将使您的变量仅在声明的函数中可用。但这与你所犯的错误无关
在控制器内部,您希望利用该工厂,但在创建控制器时,您不应该像创建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) {
(函数(角度){
"严格使用",;
有棱角的
.module('BinD')/在函数中包装.code>factory
调用不应该有任何区别。我想您一定也做了不同的更改
在第三个代码段中,当您使用两个参数调用.module
时,您将创建一个新模块。这将覆盖您在“代码a”或“代码B”中创建的模块
您不是在重复使用同一个模块,而是在创建一个新模块。因此,新模块上不存在您的用户服务是有道理的。
您的最后一个代码片段应该只使用一个参数调用.module('BinD')
。只需使用您想要使用的模块的名称
angular
.module('BinD')
.controller('SignUpCtrl', function ($scope, $window, UserService) {
另一个选项是只调用.module
一次,然后保存它
var app = angular.module('BinD', ['ngSails']);
然后,您可以调用app.controller
或app.factory
,而不必担心语法。Aha,所以我声明不同的模块“绑定”并且模块必须由外部变量管理。是吗?您的第二种方法在他的情况下永远不会起作用。。在第二部分中,他使用IIFE模式。@user3413534您可以管理如果你觉得更简单的话,可以将它放在外部变量中。这通常是我所做的。@PankajParkar,是的,显然app
变量需要在引用它的范围内。所以要么使用window.app或$window.app,要么从iLife返回它。@BuhBuh那么还有其他的前进方式吗?我的大脑不会想象其他方式。