我在控制台中收到了Angular错误:Error: Argument 'myControllerName' is not a function, got undefined
。在堆栈跟踪之后,它似乎来自$broadcast
函数,从updateRoute
调用,等等。棘手的是错误只发生在Firefox 中,而不是Chrome或IE。
设定:
我已经通过类似的SO答案查看"参数不是函数,未定义"但是它们都没有从我能说的内容中解决这个特定问题。我还检查了Angular changelog,但没有特别提及下一版本的Firefox修复程序。
有没有人知道Firefox和其他浏览器之间的差异,或此Angular版本中的任何已知错误,或此错误的可能原因?
答案 0 :(得分:0)
发现了潜在的问题:控制器使用的是ES5严格模式('use strict';
),并且有问题的函数在范围内定义得太迟了。解决方案是简单地移动定义违规函数的位置。
所以似乎 在Firefox处理ES5严格模式的方式上存在一些差异。
来自Mozilla Developer Network's Script Mode reference:
...特定于Mozilla的警告:... 严格模式禁止函数语句不在脚本或函数的顶层。在浏览器的普通代码中,允许使用函数语句&#34 ;到处&#34 ;.这不是ES5(甚至是ES3)的一部分!它是在不同浏览器中具有不兼容语义的扩展。未来的ECMAScript版本有望为函数语句指定新的语义,而不是在脚本或函数的顶层。