AngularJS:路由运行控制器两次

AngularJS: Routing runs controller twice

我正在尝试构建自定义单选按钮,我发现我的控制器针对每个实例执行了两次。 我没有两次指定视图控制器。这似乎是常见问题。我正在使用 angular-routing,相关的代码片段是这样的:

$routeProvider.when('/:action', {
    templateUrl: function (params) {
        if (!params.action) params.action = 'Index';
        return '_' + params['action'];
    }
});

我在模板中使用了ng-controller。 routeChangeSuccessful 事件(或它的任何名称)触发,它正常编译所有内容,但它似乎跟进一些 post link 函数,该函数也编译所有内容;因此是双重实例。

我做错了什么?如何避免重复调用?


更新

我发现当通过 AngularJS 路由时,它正在重新编译初始视图,无论那是什么。我可以通过添加一个总是先被点击的秘密空白页来解决这个问题(我正在开发一个 .NET MVC 项目,所以我可以通过 MVC 路由来控制它),但这看起来很愚蠢。

为什么 ngRoute 每次都重新编译初始视图?有优雅的解决方法吗?

我最后检查过,ngView 不会阻​​止编译最初获取的模板,实际上它会在视图更改时重新编译它,然后替换它并编译 ngRoute 获取的模板。

要解决此问题,请仅 AngularJS 请求 return 个模板。 Return 否则为空白模板。我通过让 AngularJS 请求包含下划线前缀来处理这个问题。在MVC路由中,如果有下划线,则return请求的partial;否则,return 具有空主体的布局。