首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS锅炉板语法

AngularJS锅炉板语法
EN

Stack Overflow用户
提问于 2015-09-22 14:49:33
回答 2查看 183关注 0票数 3

我对AngularJS所面临的挫折之一是在示例中使用的各种样式。我看到了4种向模块声明和添加AngularJS元素的不同方法(包括声明模块的不同方式)。In another question,我询问了如何使用全局变量,而不是直接声明模块。现在,我想知道使用各种样式向模块添加元素的优缺点是什么。(我将不包括声明模块全局变量的示例,因为这种样式已被折现为'bad practice')

假设模块在文件myMod.js中声明为:

代码语言:javascript
复制
angular.module('myMod', [
        // Angular modules
        'ui.router'
        ,'ui.bootstrap'
        ,'ngResource'
        ,'ngStorage'

    ]);

现在我想在模块中添加一个控制器,我已经看到:

(假设每个示例表示名为:myController.js的文件的全部内容)

备选案文A:

代码语言:javascript
复制
angular.module('myMod')
        .controller.('thisController',['dependencyA','dependencyB',
        function(dependencyA, dependencyB){
....stuff to do
}]);

选项B:只是添加“使用严格”

代码语言:javascript
复制
'use strict';

 angular.module('myMod')
            .controller.('thisController',['dependencyA','dependencyB',
            function(dependencyA, dependencyB){
    ....stuff to do
    }]);

选项C:将整件事情包装成一个匿名函数,如:

代码语言:javascript
复制
(function(){
'use strict';

angular.module('myMod')
            .controller.('thisController',['dependencyA','dependencyB',
            function(dependencyA, dependencyB){
    ....stuff to do
    }]);

选项D:在控制器声明中声明命名函数而不是匿名函数如下:

代码语言:javascript
复制
(function(){

'use strict'

angular
       .module('myMod')
       .controller('thisController',thisController);

thisController.$inject = ['dependencyA','dependencyB'];

function thisController(dependencyA,dependencyB){
...stuff to do
}

在模块中添加工厂、服务、指令等也存在类似的不同示例。据我所知,为了实现同样的目标,这些都是不同的风格。哪种技术代表“最佳实践”和“为什么”?

(我不希望这变成一篇“意见篇”,请给出“客观”的理由来选择一种风格。)

EN

回答 2

Stack Overflow用户

发布于 2015-09-22 15:24:50

至于“使用严格”,这与AngularjJS本身无关。这是一个Javascript指令,它执行严格模式,禁止在Javascript中使用未声明的变量。立即调用的函数表达式(IIFE)包装角码,防止变量泄漏到全局范围。至于声明一个命名的函数,我认为这将导致代码更加清晰,并且是我首选的方法。

票数 2
EN

Stack Overflow用户

发布于 2015-09-22 15:32:18

他们都执行相同的工作,我个人使用命名函数方法。但如果你想的话你可以把它们结合起来。

代码语言:javascript
复制
angular
       .module('myMod')
       .controller('thisController',['dependencyA', thisController]);

thisController.$inject = ['dependencyB'];

function thisController(dependencyA,dependencyB){
...stuff to do
}

我使用TypeScript,所以我的控制器看起来像这样。

代码语言:javascript
复制
export class thisController
{
        static $inject = ['DependencyA'];
        constructor(private _dependencyA: DependencyA)
        {

        }
}
 angular.module('myMod').controller('thisController', thisController)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32720094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档