好。 我有一个URL设置,以注销用户。 在服务器上,没有HTML。 在服务器上的会议只是被破坏,那么用户会被重定向到一个地址。
这正常工作与纯HTML,而是用角我有问题。 我一直在使用路由的所有主要航线$routeProvider.when('/foo', {templateUrl: '/foo.html', controller: 'Ctrl'})
而正常工作正常模板的路线。但是,如果有没有模板,它不会工作。
所以,我怎么支持路由/logout
以同样的方式如上,当没有HTML模板?
一种解决方法是使用template
,而不是templateUrl
。 从角文档 :
模板 - {字符串=} - HTML模板为应由ngView或ngInclude指令一起使用的字符串。 此属性优先templateUrl。
这可以使用如下:
$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});
注意:您必须使用" "
,而不是一个空字符串""
,因为角使用一个if (template)
检查点火控制器之前,和一个空字符串的计算结果为假。
- 编辑 -
一个更好的办法来做到这一点是使用resolve
图。 见角文档 :
决心 - {对象=} - 依赖的可选地图应当注入到控制器。
这可以像这样使用:
$routeProvider.when('/foo', {resolve: {redirect: 'RedirectService'}});
注:我从“Ctrl”键“RedirectService”改变了它,因为你的问题描述什么是不是真的在角意义上的“控制器”。 它不设置范围的视图。 相反,它更像是一个服务,它结束了转向。
我写基于已接受的答案,并在它的评论中提到的问题GitHub的解决方案。
我使用的方法是resolve
在参数$routeProvider
。 在我来说,我试图创建一个很好的解决方案在我的应用程序注销 ,当用户进入/退出 。
示例代码$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('/');
}
});
伟大的作品!