Javascript Can';t将动态路线从AngularJS 1.2转换为1.6

Javascript Can';t将动态路线从AngularJS 1.2转换为1.6,javascript,angularjs,ngroute,Javascript,Angularjs,Ngroute,在AngularJS 1.2中,我有一些代码可以动态加载路由和控制器,效果很好。我想升级到AngularJS 1.6,现在我的动态不再工作了 这是我加载JS文件并重新计算路由的旧代码(由于我有一些有效性验证,所以稍微简化了一些,但这是最基本的): 正在加载的JS文件如下所示: moduleApp.routeProvider. when('/FirstModule', { templateUrl: 'FirstModule.html', caseInsens

在AngularJS 1.2中,我有一些代码可以动态加载路由和控制器,效果很好。我想升级到AngularJS 1.6,现在我的动态不再工作了

这是我加载JS文件并重新计算路由的旧代码(由于我有一些有效性验证,所以稍微简化了一些,但这是最基本的):

正在加载的JS文件如下所示:

moduleApp.routeProvider.
    when('/FirstModule', {
        templateUrl: 'FirstModule.html',
        caseInsensitiveMatch: true
    });

moduleApp.controllerProvider('firstModuleController', function ($scope) {
});
同样,这在1.2中可以很好地工作,但我相信应用1.6中的路由不再以这种方式工作。因此,我需要在使用
$rootScope
的函数中更改什么才能使其再次工作?还是我还需要更多的改变?万一,什么

我已经用这个代码做了一个测试


index.html
中的AngularJS版本更改为1.2.16,以查看它在1.2中的工作情况(记住还要将链接中的hashbang更改为仅
而不是
)。把它改回1.6,它就不工作了。

这行有点奇怪。它让你进入一个无限循环

$rootScope.$broadcast('$locationChangeSuccess', $location.path(), $location.path());
不要试图欺骗Angular重新加载,只需调用
$route.reload()

这是你的电话号码

还有一个小错误。
ng click=“FirstButton”

根据评论进行编辑:

广播系统事件($LocationChangeSuccessful)就像你那样听起来很危险。在某种程度上,您很幸运它在1.2中工作,因为它从未得到真正的支持。当然,正如您的代码所宣称的那样,位置更改并不是成功的

重新加载
的文档只需说:

导致$route服务重新加载当前路由,即使$location未更改。 因此,ngView创建新的作用域并重新实例化控制器


因此,这应该适用于所有受支持的版本。我预计不会有任何副作用。这只是您尝试自制的标准方式。

请定义“不工作”我单击Plunker中的链接“First module”,否则调用部分路由并加载FirstModule.js。但是,模块的内容从来没有显示过。我曾经提到过这个解决方案,但我不知道这是否是最好的方法。你能从理论上解释为什么这在1.2版有效,而不是1.6版吗?与其他方法相比,
$route.reload()
是否有任何缺点?我的Plunker现在使用此答案中的代码进行更新,并记录在案,以便将来的访问者可以看到这一点:
$rootScope.$broadcast('$locationChangeSuccess', $location.path(), $location.path());
.otherwise({
    resolve: {
        deps: function($q, $rootScope, $location, $http, $route) {
            var deferred = $q.defer();

            var modulename = $location.path().split("/")[1];

            if (modulename !== null) {
                $script(modulename + ".js", function() {
                    $rootScope.$apply(function() {
                        //$rootScope.$broadcast('$locationChangeSuccess', $location.path(), $location.path());
                        $route.reload();
                    });
                });
            }

            return deferred.promise;
        }
    }
});