AngularJS:路由运行控制器两次

时间:2016-01-26 23:22:52

标签: angularjs angularjs-routing

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

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

我在模板中使用ng-controller。触发了routeChangeSuccessful事件(或者它所调用的任何事件),它会正常编译所有内容,但它似乎会跟进一些后期链接函数,它也可以编译所有内容;因此是双重实例。

我做错了什么?如何避免重复通话?

<小时/> 更新

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

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

1 个答案:

答案 0 :(得分:0)

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

要解决此问题,请仅让AngularJS请求返回模板。否则返回空白模板。我通过让AngularJS请求包含下划线前缀来处理这个问题。在MVC路由中,如果下划线在那里,则返回请求的部分;否则,用空体返回布局。