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 具有空主体的布局。
我正在尝试构建自定义单选按钮,我发现我的控制器针对每个实例执行了两次。 我没有两次指定视图控制器。这似乎是常见问题。我正在使用 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 具有空主体的布局。