AngularJS 控制器和“严格使用”

2024-02-26

我最近开始使用 JSHint,它要求我使用“use strict”的函数形式。从那时起,AngularJS 就会抛出错误:

“错误:参数‘webAddressController’不是函数,未定义”

当我删除“use strict”的函数形式时,控制器加载正常。

控制器:

(function () {
    "use strict";

    function webAddressController($scope, $rootScope, web_address_service) {
             // Do things
    }

}());

有人对这里发生的事情有任何了解吗?


首先,我想说 pkozlowski 确实了解 Angular 的东西,但这实际上并不是 Angular 的问题,而是闭包的问题。

Angular 在两个地方寻找控制器:

  1. 在通过 Module.controller() 注册的自己的控制器注册表中
  2. In a global变量(或全局函数声明)

问题是“use strict”闭包中的所有内容都不是全局的。它被包含在包含它的匿名函数中并被私有化。

(function() {
   // nothing in here is global or even public.
   // "use strict" or not.

   "use strict"; // this is mostly irrelevant.

   // this will not work, because it's wrapped and not global
   function ThisDoesntWork($scope) {
   };

   // window is the global root variable. So this works.
   window.ThisWorks = function($scope) {

   };

   // this will work, because it's explicitly registering the controller
   // presuming app is your Module variable from outside of the closure.
   app.controller('ThisIsBest', function($scope) {

   });

})();

//this works because it's global.
function ThisAlsoWorks($scope) {

}

// if you declare a global var, then set it inside
// of your closure, you're good to go too.
var ThisWillWorkToo;

(function {
    //here we're setting it again.
    ThisWillWorkToo = function($scope) {
    };
})();


// if you're really crazy you can even do this...
 var ThisWillWorkButItsWeird = (function() {
      "use strict";

       function ThisWillWorkButItsWeird($scope) {

       }

       return ThisWillWorkButItsWeird;
  })();

最后,您可以将“use strict”放在任何函数中,或者如果您愿意,也可以放在文件级别。 “use strict”本身不会给你带来任何破坏。如您所见,注册控制器的方法有一千种。最好的选择可能是按照建议使用 .controller 方法显式注册它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS 控制器和“严格使用” 的相关文章

随机推荐

  • 阻止应用程序在 bluestacks、youwave 和其他模拟器中运行

    我想阻止我的应用程序在 bluestacks youwave 等模拟器中运行 我是否可以阻止甚至识别用户是否在 bluestacks youwave 中运行 我的应用程序具有登录功能 所以它也使用服务器 所以我不介意在客户端 服务器端阻止用
  • Excel 2010 - 在工作簿中存储功能区自定义

    我是 Excel 功能区自定义新手 将功能区自定义存储在工作簿中的最直接的方法是什么 以便在工作簿关闭时自定义消失得无影无踪 要更改工作簿的功能区 您需要更改 xlsx 文件 内部 的 XML 文件 只不过是 zip 一切都在这里得到了很好
  • 当 required 不为 true 时,jQuery 验证 `valid()` 方法返回 0

    我正在使用jQuery 验证插件 http docs jquery com Plugins Validation我有一个带有班级的文本框digits强制它仅是数字 但不是必需的 当我在表单上调用 validate 时 它 工作正常 但如果我
  • 为什么Web Workers不允许修改dom

    I know web workers作为一个单独的线程工作UI thread但我不明白为什么他们不允许修改DOM 我的意思是你可以允许线程间通信并保持DOM数据位于共享空间并具有web workers线程修改DOM 为什么浏览器不允许这样做
  • Android 4.3 ImageView 方法 getImageMatrix() 的错误

    我最近升级到 Android 4 4 我的应用程序的某些功能令人惊讶地停止工作 我有这段代码用于初始化然后绘制我的自定义视图 基本思想是调整缩放级别 使整个视图适合屏幕 private void initAtZoomLevel float
  • Angular 4材质表突出显示一行

    我正在寻找一种好方法来突出显示整个行md table 我应该做指令还是什么 div class example container mat elevation z8 div
  • 在步骤:将推送通知功能添加到您的应用程序 ID 中报告错误

    In 开发者网站 https developer apple com 我让我的app ID s Push Notifications enable 但在我的项目中 TARGETS gt Capabilities gt Push Notifi
  • UITableView 顶部和底部具有透明渐变

    我搜索过这个论坛 谷歌和其他论坛 但没有找到我的特定问题的答案 基本上 我有一个UIView其中包含UITableView 我跟着这个tutorial http www cocoanetics com 2011 08 adding fadi
  • 事件网格吞吐量限制

    我是天蓝色事件网格概念的新手 目前正在研究事件网格以在我们的项目中实现 任何人都可以告诉我们事件网格的吞吐量吗 每秒我可以推送多少个事件以及每秒事件网格的出口是多少 意味着每秒从事件网格输出事件的数量 我向微软询问了这个话题 他们的回应是
  • Java中的抽象类和方法,继承

    我有类 B 它继承自类 A 超类 A 是抽象的 包含一个抽象方法 我不想在类 B 中实现抽象方法 因此我也需要将类 B 声明为抽象方法 声明 B 类抽象 有两件事对我有用 程序正确编译和运行 1 我没有在类 B 中声明任何抽象方法 即使该类
  • MongoDB 唯一索引不允许覆盖

    我在 Mongo 文档中的一个字段上创建了一个 unique true 索引 这按预期工作 它通过覆盖现有条目来禁止重复 我想禁止覆盖 而是在尝试插入重复项时出现错误或异常 有什么办法可以做到这一点吗 我该如何使用 Spring Data
  • 如何重用/重置 ZipInputStream?

    我想重置 ZipInputStream 即回到起始位置 以便按顺序读取某些文件 我怎么做 我好卡住 ZipEntry entry ZipInputStream input new ZipInputStream fileStream item
  • CSS 中是否可以使用表示行的元素来构建网格?

    我正在尝试使用 HTML CSS 为现代浏览器复制此设计 它本质上是一个包含行和列的表格 这意味着如果一行的名称单元格变大 那么所有行的名称单元格都应该变大 我看到两种可能性 表格和 CSS 网格 据我所知 表格中的行的样式不够 例如它们不
  • .Net框架中是否有系统错误代码的枚举?

    我有一个返回 GetLastError 代码的库函数 像这样的事情 http msdn microsoft com en us library ms681381 28v vs 85 29 aspx 我需要将它们与特定错误进行比较 例如ERR
  • 在unix中查找两个字符串的最长公共子串的shell命令是什么?

    在unix中查找两个字符串的最长公共子串的shell命令是什么 例如 foo abcdefghi abjklmdefnop 打印 def 我不确定是否有一个命令可以为您完成这项工作 但以下 bash 脚本应该可以完成这项工作 bin bas
  • 动态加载图像到div中

    我有一个个人资料图像列表 这些图像出现在 菜单下拉 div 中 该 div 最初通过 CSS 隐藏 我想在选择每个菜单项时动态加载这些图像 作为列表 以减少页面加载时间 这怎么可能 尝试使用 divID html img src path
  • GDB 如何处理大(>1 Gb)调试文件?

    我在使用远程 GDB 会话调试 C 应用程序时遇到问题 代码库很大 因此它包含 当使用 O2 g DNDEBUG 标志编译时 一个包含调试信息的大文件 1 1 Gb 不幸的是 我不能在调试期间只使用部分符号表 因为调试器始终会跳过应用程序的
  • for循环中的倒数

    我相信 根据一些研究阅读 for 循环中的倒计时实际上在运行时更高效 更快 我的完整软件代码是 C 我目前有这个 for i 0 i
  • 在 R 中使用 strsplit(),忽略括号中的任何内容

    我正在尝试使用strsplit 在 R 中根据逗号将字符串分成几部分 但我不想在括号中拆分任何内容 我认为答案是正则表达式 但我正在努力使代码正确 例如 x lt This is it isn t it well yes gt strspl
  • AngularJS 控制器和“严格使用”

    我最近开始使用 JSHint 它要求我使用 use strict 的函数形式 从那时起 AngularJS 就会抛出错误 错误 参数 webAddressController 不是函数 未定义 当我删除 use strict 的函数形式时