AngularJS:避免使用'angular'全局对象

时间:2015-01-19 13:10:03

标签: javascript angularjs

我想知道避免使用“棱角分析”是否是一个好习惯。控制器,服务等中的全局对象

为了举例,我们想要调用函数:

angular.isDefined(myVar)

我们如何引用角度'对象

选项:

1只要使用它,可能会得到一些未定义的变量'来自IDE的警告

2参考' angular'依赖AMD的方式

define([
        'angular'
    ], function (angular) {
        'use strict';

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

3参考' angular' Angular方式

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

define([], function () {
        'use strict';

        return ['ang', '$log', '$filter', function (ang, $log, $filter) {
            return {
                // ... code ...
                ang.isDefined(myVar);
            };
        }];
    }
);

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

1 个答案:

答案 0 :(得分:0)

您首先使用Angular这一事实意味着您不必担心它未被定义。从那里它实际上只是一个静态分析问题......你想清楚地表明你正在引用一个全局变量。

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

  • 明确注入$window和参考$window.angular
  • 配置静态分析工具,使其知道angular在其他地方定义。您可以使用globals中的.jshintrc媒体资源执行此操作。

我可能会选择$window和您的选项3的组合,以防止在分析该文件时发出警告:

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