我对AngularJS所面临的挫折之一是在示例中使用的各种样式。我看到了4种向模块声明和添加AngularJS元素的不同方法(包括声明模块的不同方式)。In another question,我询问了如何使用全局变量,而不是直接声明模块。现在,我想知道使用各种样式向模块添加元素的优缺点是什么。(我将不包括声明模块全局变量的示例,因为这种样式已被折现为'bad practice')
假设模块在文件myMod.js中声明为:
angular.module('myMod', [
// Angular modules
'ui.router'
,'ui.bootstrap'
,'ngResource'
,'ngStorage'
]);现在我想在模块中添加一个控制器,我已经看到:
(假设每个示例表示名为:myController.js的文件的全部内容)
备选案文A:
angular.module('myMod')
.controller.('thisController',['dependencyA','dependencyB',
function(dependencyA, dependencyB){
....stuff to do
}]);选项B:只是添加“使用严格”
'use strict';
angular.module('myMod')
.controller.('thisController',['dependencyA','dependencyB',
function(dependencyA, dependencyB){
....stuff to do
}]);选项C:将整件事情包装成一个匿名函数,如:
(function(){
'use strict';
angular.module('myMod')
.controller.('thisController',['dependencyA','dependencyB',
function(dependencyA, dependencyB){
....stuff to do
}]);选项D:在控制器声明中声明命名函数而不是匿名函数如下:
(function(){
'use strict'
angular
.module('myMod')
.controller('thisController',thisController);
thisController.$inject = ['dependencyA','dependencyB'];
function thisController(dependencyA,dependencyB){
...stuff to do
}在模块中添加工厂、服务、指令等也存在类似的不同示例。据我所知,为了实现同样的目标,这些都是不同的风格。哪种技术代表“最佳实践”和“为什么”?
(我不希望这变成一篇“意见篇”,请给出“客观”的理由来选择一种风格。)
发布于 2015-09-22 15:24:50
至于“使用严格”,这与AngularjJS本身无关。这是一个Javascript指令,它执行严格模式,禁止在Javascript中使用未声明的变量。立即调用的函数表达式(IIFE)包装角码,防止变量泄漏到全局范围。至于声明一个命名的函数,我认为这将导致代码更加清晰,并且是我首选的方法。
发布于 2015-09-22 15:32:18
他们都执行相同的工作,我个人使用命名函数方法。但如果你想的话你可以把它们结合起来。
angular
.module('myMod')
.controller('thisController',['dependencyA', thisController]);
thisController.$inject = ['dependencyB'];
function thisController(dependencyA,dependencyB){
...stuff to do
}我使用TypeScript,所以我的控制器看起来像这样。
export class thisController
{
static $inject = ['DependencyA'];
constructor(private _dependencyA: DependencyA)
{
}
}
angular.module('myMod').controller('thisController', thisController)https://stackoverflow.com/questions/32720094
复制相似问题