如果可能的话,如何使momentjs不是Angularjs中的全局变量

时间:2015-12-15 02:57:20

标签: angularjs momentjs

阅读Angularjs style guide Y240时,我很困惑。

它讨论了为供应商库创建角度常量'全局变量,以便我们可以注入供应商库,否则这些库是全局变量。

我的理解是你必须这样做:

<script src="moment.js"></script>

在app.js中加载angular.js和控制器及指令之前,moment对象是一个全局变量。如何使用以下代码使其成为服务,并在需要时注入?

如果我没有看到全貌,请纠正我。

// constants.js

/* global toastr:false, moment:false */
(function() {
    'use strict';

    angular
        .module('app.core')
        .constant('toastr', toastr)
        .constant('moment', moment);
})();

我的困惑: 上面的代码应该是全局变量&#39;时刻&#39;不全球化。它是否正确?我认为这是不可能的。时刻仍是全球变量。

2 个答案:

答案 0 :(得分:0)

要在AngularJS应用程序中使用以这种方式创建的常量:

//declare 'app.core' as a dependency
angular.module('myApp', ['app.core']);

//declare the constant in your injection list
angular.module('myApp').controller('myController', ['$scope', 'moment',
    function($scope,moment) {
        //use moment as you would normally
        var now = moment();
}]);

<强>更新

moment仍然是一个全局变量。

John Papa这样做的原因:

  

为什么?:提供一种注入供应商库的方法,否则这些库是全局的。通过允许您更轻松地了解组件的依赖性(避免漏洞抽象),这可以提高代码可测试性。它还允许您在有意义的地方模拟这些依赖项。

https://github.com/johnpapa/angular-styleguide#style-y240

答案 1 :(得分:0)

我想也许他们只是想用

加载momentjs

<强> requirejs

<强> browserify

因此,当加载lib时,它位于本地范围的函数(){}中。