angular作为全局变量和参数的区别

Difference between angular as global variable and parameter?

本文关键字:参数 区别 全局变量 angular      更新时间:2023-09-26

我写了一个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是未知的(可能?)"。我真的不知道为什么前面提到的两个相同的代码工作方式不同。

函数中的factory调用应该没有任何区别。我想你一定也做了不同的改动。

在第三个代码片段中,当您使用两个参数调用.module时,您创建了一个新模块。这将覆盖你在"代码A"或"代码B"中创建的模块。

您没有重用相同的模块,而是创建了一个新模块。因此,你的UserService在新模块上不存在是有道理的。

最后一个代码片段应该只带一个参数调用.module('BinD')。只要你想要使用的模块的名字。

angular
    .module('BinD')
    .controller('SignUpCtrl', function ($scope, $window, UserService) {

,


另一个选项是您只调用.module一次,并保存它。

var app = angular.module('BinD', ['ngSails']);

然后您可以调用app.controllerapp.factory,而不必担心语法。

在你的代码A代码B在这两个部分,你已经创建了一个模块BinDngSails的依赖,然后你注册工厂与该模块,但是代码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) {