当前位置: 首页 > 面试题库 >

为什么angularjs控制器声明具有这种语法结构?

赖运珧
2023-03-14
问题内容

我一直看到下面的angularjs控制器语法结构。

angular.module('7minWorkout').controller('WorkoutController', 
['$scope', '$interval', '$location', 
function ($scope, $interval, $location)
{
}]);

为什么在参数名称中重复?为什么不这样

angular.module('7minWorkout').controller('WorkoutController', 
    ['$scope', '$interval', '$location', 
    function ()
    {
    }]);

要么

   angular.module('7minWorkout').controller('WorkoutController', 
    [ 
    function ($scope, $interval, $location)
    {
    }]);

问题答案:

数组语法将帮助您缩小/缩小js代码。

angular.module('7minWorkout').controller('WorkoutController', 
  function ($scope, $interval, $location) {
    // code here
});

将被缩小并修改为:

angular.module('7minWorkout').controller('WorkoutController', 
 function (a, b, c) {
    // code here
});

因此Angular将无法确定要注入哪些依赖项

另一方面,使用array声明

angular.module('7minWorkout').controller('WorkoutController', 
 ['$scope', '$interval', '$location', function ($scope, $interval, $location) {
    // code here
}]);

将缩小为:

angular.module('7minWorkout').controller('WorkoutController', 
  ['$scope', '$interval', '$location', function (a, b, c) {
    // code here
}]);

所以角就知道了abc代表。

如果您使用第一个示例代码,则还有另一种注入变量的方法,如下所示:

WorkoutController.$inject = ['$scope', '$interval', '$location'];

要么

angular.module('7minWorkout').controller('WorkoutController', /* @ngInject */
  function ($scope, $interval, $location) {
   // code here
});

$inject当注释代码时,它将创建上面提到的方法。

因此,主要有四种注释:

  1. 隐式注释 -第一个示例代码
  2. 内联数组注释 -第二个示例代码
  3. $ inject属性注释 -$ inject方法
  4. $ ngInject注释注释- @ngInject方法

ng-注释

ng-annotate之类的工具可让您在应用中使用隐式依赖项注释,并在最小化之前自动添加内联数组注释。如果您决定采用这种方法,则可能要使用ng-strict- di

有关更多信息,请参阅《AngularJS开发人员指南-
使用严格依赖注入》



 类似资料:
  • 问题内容: 我已经在AngularJS教程中看到,有人像这样声明其控制器功能: 其他人这样做是这样的: 哪种方法是在JS文件中声明控制器的最佳方法,因此与最新版本的AngularJS(现在为1.0.7)一起使用效果最佳,这是最佳做法?还是真的不重要吗? 问题答案: 您应该遵循他们提供的第二个示例,该示例使用字符串标识控制器,而不是潜在的全局函数。使用Array语法,以便您可以最小化代码而不必担心m

  • 问题内容: 使用语法时如何订阅属性更改? 问题答案: 只需绑定相关上下文即可。 示例:http://jsbin.com/yinadoce/1/edit 更新: Bogdan Gersak的答案实际上是等效的,两个答案都尝试在正确的上下文中进行绑定。但是,我发现他的答案更干净。 话虽如此,首先,您必须了解其背后的基本思想。 更新2: 对于那些使用ES6的人,通过使用它们可以获得具有正确上下文OOTB

  • 我正在学习JavaScript及其库jQuery。我不知道为什么允许这种类型的声明(snake.x)而没有“let”或任何东西。这是我的代码

  • 问题内容: 从golang规范 是否有使用内的 空白 字段的实际方案?(一些代码片段将不胜感激) 问题答案: 填充正是所谓的:一些填充,用于将以下字段与您的需求对齐,例如,匹配C结构的布局。无法访问它(至少在没有软件包不安全的情况下)。

  • 问题内容: 我刚刚安装并重新安装了IntelliJ。每个Java文件都将变成红色。我检查了JDK;它是1.6。##。在构建工作就好了。 我遇到了通常突出显示的错误。在每个声明上: 无法解析符号SomeEntityBean / Bean 并在每种方法上: 无法解析方法SomeFunction() 如何解决这些错误错误? 问题答案: 即使没有Korgen所描述的外部更改,有时IntelliJ也会自己感

  • 问题内容: 根据Go参考,有两种声明变量的方法 Variable_declarations(以或的格式) 和 Short_variable_declarations(以的格式) 我发现决定使用哪个非常令人困惑。 我知道的区别(到现在为止)是: 我只能在功能范围内使用格式。 可以 在 多变量short声明中 重新 声明 。 但是 据我所知, 它们的行为确实一样。并且在参考文献中还说: 它(方式)是带