确定。我有一个网址设置来记录用户。在服务器上,没有html。服务器上的会话只是被破坏,然后用户被重定向到一个地址。
这适用于普通的html,但是对于Angular,我遇到了问题。我一直在使用$routeProvider.when('/foo', {templateUrl: '/foo.html', controller: 'Ctrl'})
路由所有主要路由,这对于正常的模板化路由很好。但是,如果没有模板,它将无法工作。
那么,当没有html模板时,我如何以与上面相同的方式支持路由/logout
?
答案 0 :(得分:59)
解决方法是使用template
代替templateUrl
。来自Angular docs:
template - {string =} - html模板作为应该使用的字符串 通过ngView或ngInclude指令。此属性优先于 templateUrl。
可以使用如下:
$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});
注意:您必须使用" "
而不是空字符串""
,因为Angular在触发控制器之前使用if (template)
检查,而空字符串的计算结果为false。
- 编辑 -
更好的方法是使用resolve
地图。请参阅Angular Docs:
resolve - {Object。=} - 可选的地图 应该注入控制器的依赖项。
可以这样使用:
$routeProvider.when('/foo', {resolve: {redirect: 'RedirectService'}});
注意:我已经将它从“Ctrl”更改为“RedirectService”,因为您在问题中描述的内容并不是Angular意义上的“控制器”。它没有为视图设置范围。相反,它更像是一种服务,最终会重定向。
答案 1 :(得分:9)
我正在根据已经接受的答案和其评论中提到的github问题编写解决方案。
我使用的方法是resolve
中的$routeProvider
参数。在我的情况下,我试图在我的应用程序中创建一个很好的解决方案 logout ,当用户转到 / logout 时。
$routeProvider
的示例代码:
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.
...
when('/logout', {
resolve: {
logout: ['logoutService', function (logoutService) {
logoutService();
}]
},
}).
...
}]);
在解决方案部分,您可以按名称指定服务(工厂),稍后必须调用它。它仍然是最好的解决方案。
为了让示例完整,我展示了我的logoutService
:
angular.module('xxx').factory('logoutService', function ($location, Auth) {
return function () {
Auth.setUser(undefined);
$location.path('/');
}
});
效果很好!