Javascript 将Angular 1.2升级到1.4,控制器注册但不';跑不动

Javascript 将Angular 1.2升级到1.4,控制器注册但不';跑不动,javascript,angularjs,angularjs-controller,Javascript,Angularjs,Angularjs Controller,解决了事实证明,该项目抑制了console.log,这意味着可怜的JavaScript试图向我显示错误和失败。一旦我重新登录,我就能看到实际上有错误阻止控制器运行。我现在也可以从ng strict di获得错误。事实上,有一种注射不起作用。我仍然不确定这与Angular的新版本有什么关系,但至少我知道如何修复它 我正在将我的项目从Angular 1.2.9升级到1.4.8,我遇到了一个让我难堪的bug。当我加载运行1.4.8的站点时,我的控制器在应用程序模块上注册,但控制器功能从未运行 app.

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

我正在将我的项目从Angular 1.2.9升级到1.4.8,我遇到了一个让我难堪的bug。当我加载运行1.4.8的站点时,我的控制器在应用程序模块上注册,但控制器功能从未运行

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显示控制器已注册,但认为它没有范围变量

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

知道发生了什么吗?我很乐意回答任何问题或添加信息

编辑1:控制器当前被称为:
,其中TemplateCtrl是有问题的控制器,CorsApp是它正在注册的应用程序。如果我的第一个问题不清楚,那么在bundler中替换Angular 1.4.8而不是1.2.9是我所做的唯一更改,这将使项目从正常工作变为失败

编辑2:我还做了一些事情试图找到这个。首先,我删除了除普通的Angular 1.4.8之外的所有js库。所以没有jQuery,没有ui引导,没有ngRoute,等等。错误仍然存在

我还一直在追踪js调用堆栈中的问题,似乎该错误发生在触发DOMContentLoaded事件之后。根据命中断点的顺序,将加载html中引用的js文件,然后触发DOMContentLoaded事件。(换句话说,这正是您所期望的。)在该事件之后,相应的控制器(如上所述的TemplateCtrl)没有运行,尽管文件已被读取,并且控制器显然已注册。好像没有加载范围

这个屏幕抓取捕获了bug出现之前的瞬间。据我所知,这基本上是在浏览器说“好了,我们完成了,渲染一切”之前发生的最后一件事!因此,它可能与这个bug毫无关系


编辑3:所以我试着用一个全新的、小巧的控制器替换无法运行的控制器,你知道什么!装得很好。我找不到任何关于Angular对控制器的大小/长度或任何类似的东西有限制的建议,但这是一个想法。至少我可以猜到控制器本身正在做一些违反1.4.8而不是1.2.9的事情。

愚蠢的问题-您确实有某种ng控制器或某个指令将其用作控制器?因为(只是一个假设)如果没有使用,为什么angular应该运行控制器功能?哦!是的,控制器当前被称为:
,其中TemplateCtrl是所讨论的控制器。我对这些功能不感兴趣,但我还没有得到改变的许可……事实上,控制器的注册方式已经发生了变化,发生在1.2和1.3之间。然而,基于您迄今为止提供的有限代码,您似乎并不是在以旧的方式进行操作。话虽如此,有些问题可能很难排除。有一个较新的属性可用于
ng app
,它将执行一些额外的分析并报告依赖性问题:
ng strict di
。这对于生产是安全的,因为它只输出额外的诊断信息。只需将其添加到与
ng应用程序
相同的元素(可能是
元素),看看它是否报告了任何依赖性问题。下面是angular团队为说明
ng strict di
:愚蠢的问题-您确实有某种ng控制器或指令将其用作其控制器?因为(只是一个假设)如果没有使用,为什么angular应该运行控制器功能?哦!是的,控制器当前被称为:
,其中TemplateCtrl是所讨论的控制器。我对这些功能不感兴趣,但我还没有得到改变的许可……事实上,控制器的注册方式已经发生了变化,发生在1.2和1.3之间。然而,基于您迄今为止提供的有限代码,您似乎并不是在以旧的方式进行操作。话虽如此,有些问题可能很难排除。有一个较新的属性可用于
ng app
,它将执行一些额外的分析并报告依赖性问题:
ng strict di
。这对于生产是安全的,因为它只输出额外的诊断信息。简单广告