将Angular 1.2升级到1.4,控制器寄存器但不运行

时间:2015-12-09 20:36:18

标签: javascript angularjs angularjs-controller

已解决!事实证明该项目已禁止console.log,这意味着可怜的JavaScript试图向我显示错误并失败。一旦我重新登录,我就能看到实际上存在阻止控制器运行的错误。我现在也可以从ng-strict-di那里得到错误。事实上,注射不能正常工作。我仍然不确定这与新版本的Angular有什么关系,但至少我知道如何解决它。

我正在努力将我的项目从使用Angular 1.2.9升级到1.4.8,而且我遇到了一个让我难过的错误。当我加载运行1.4.8的站点时,我的控制器在app模块上注册,但控制器功能永远不会运行。

app.controller('TemplateCtrl',
    ['$scope',
     //other injections, etc.
function ($scope)
{
    //there's a real controller here
     console.log('The controller loaded!');
}]);

在上面的缩短示例中,第1行(app.controller())上的断点将会命中,但第7行(console.log())上的断点不会。令人困惑的是,一切都在1.2.9中正常工作;只有在切换到1.4.8时才会出现这个错误。肯定Angular并没有像版本中的控制器注册那样改变基本的东西!

ng-inspector output

从屏幕抓取中可以看出,ng-inspector显示控制器已注册,但认为它没有范围变量。

我已经完成了所有修复,我可以看到更新我的代码以匹配新版本。 (没有多少,只是在一个不同的文件中使用$ cookies。)我的所有角度模块(ngRoute,ngSanitize,ngCookies)也更新到1.4.8。我还更新了项目正在使用的所有其他库(jQuery,ui-bootstrap和bootstrap的js)。我甚至试图取出jQuery和bootstrap,认为它们可能是不必要的(我从一个不是真正的Angular dev的人那里继承了这个项目,所以代码很乱)。我在控制台中没有出现任何错误。

任何想法发生了什么?我很乐意回答任何问题或添加我可以提供的信息。

编辑1:控制器当前被调用:<html ng-app="CorsApp" ng-controller="TemplateCtrl">其中TemplateCtrl是有问题的控制器,而CorsApp是它正在注册的应用程序。如果从我最初的问题中不清楚,在捆绑器中交换Angular 1.4.8代替1.2.9是我所做的唯一改变,这使得项目从工作变为失败。

编辑2:我已经做了一些其他事情来尝试追捕它。首先,除了普通的旧Angular 1.4.8之外,我删除了所有js库。所以没有jQuery,没有ui-bootstrap,没有ngRoute等。这个bug仍然会发生。

我也一直在追逐js调用堆栈中的问题,看起来错误发生在DOMContentLoaded事件触发之后。基于命令我的断点被击中,我的html中引用的js文件都被加载,然后触发DOMContentLoaded事件。 (换句话说,正是您所期望的。)在该事件之后,尽管已经读取了文件并且控制器显然正在注册,但是相应的控制器(如上所述的TemplateCtrl)没有运行。就像示波器没有加载一样。

Just before the bug

此屏幕抓取捕获错误出现之前的时刻。据我所知,这基本上是在浏览器说好之前发生的最后一件事,我们已经完成了,渲染一切!所以它可能与bug完全无关。

编辑3:所以我尝试更换不会使用全新的小型控制器运行的控制器,您知道什么!它载得很好。我找不到任何关于Angular对控制器的大小/长度或任何此类事物有限制的建议,但这是一个想法。至少我可以猜测控制器本身正在做一些冒犯1.4.8而不是1.2.9的东西。

0 个答案:

没有答案