AngularJS:避免使用“angular”全局对象

AngularJS: avoid using the 'angular' global object

本文关键字:angular 全局 对象 AngularJS      更新时间:2023-09-26

我想知道避免在控制器、服务等中使用"角度"全局对象是否是一种好习惯。

个例子,假设我们要调用函数:

angular.isDefined(myVar)

我们应该如何引用"角度"对象?

选项:

1 只需使用它,可能会从 IDE 收到一些"变量未定义"警告

2 以AMD的方式引用"角度"依赖关系

define([
        'angular'
    ], function (angular) {
        'use strict';
        return ['$log', '$filter', function ($log, $filter) {
            return {
                // ... code ...
                angular.isDefined(myVar);
            };
        }];
    }
);

3 参考"棱角"的角度方式

module.factory('ang', function() { return angular; });
define([], function () {
        'use strict';
        return ['ang', '$log', '$filter', function (ang, $log, $filter) {
            return {
                // ... code ...
                ang.isDefined(myVar);
            };
        }];
    }
);

我会选择选项 3,只是想知道什么是最好的方法。

你首先使用Angular的事实意味着你不必担心它是未定义的。从那里开始,它实际上只是一个静态分析问题......您希望明确表示您引用的是全局变量。

您提出的两种解决方案都很好。还有其他几个选项:

  • 显式注入$window和引用$window.angular
  • 配置静态分析工具,使其知道angular是在其他地方定义的。您可以使用 .jshintrc 中的 globals 属性执行此操作。

我可能会将$window和您的选项 3 结合起来,以防止在分析该文件时出现警告:

module.factory('ang', function($window) { return $window.angular; });