阅读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;不全球化。它是否正确?我认为这是不可能的。时刻仍是全球变量。
答案 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这样做的原因:
为什么?:提供一种注入供应商库的方法,否则这些库是全局的。通过允许您更轻松地了解组件的依赖性(避免漏洞抽象),这可以提高代码可测试性。它还允许您在有意义的地方模拟这些依赖项。
答案 1 :(得分:0)
我想也许他们只是想用
加载momentjs<强> requirejs 强>
或
<强> browserify 强>
因此,当加载lib时,它位于本地范围的函数(){}中。