如何在没有一个templateUrl路线?(How to route without a templ

2019-08-07 10:27发布

好。 我有一个URL设置,以注销用户。 在服务器上,没有HTML。 在服务器上的会议只是被破坏,那么用户会被重定向到一个地址。

这正常工作与纯HTML,而是用角我有问题。 我一直在使用路由的所有主要航线$routeProvider.when('/foo', {templateUrl: '/foo.html', controller: 'Ctrl'})而正常工作正常模板的路线。但是,如果有没有模板,它不会工作。

所以,我怎么支持路由/logout以同样的方式如上,当没有HTML模板?

Answer 1:

一种解决方法是使用template ,而不是templateUrl 。 从角文档 :

模板 - {字符串=} - HTML模板为应由ngView或ngInclude指令一起使用的字符串。 此属性优先templateUrl。

这可以使用如下:

$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});

注意:您必须使用" " ,而不是一个空字符串"" ,因为角使用一个if (template)检查点火控制器之前,和一个空字符串的计算结果为假。

- 编辑 -

一个更好的办法来做到这一点是使用resolve图。 见角文档 :

决心 - {对象=} - 依赖的可选地图应当注入到控制器。

这可以像这样使用:

$routeProvider.when('/foo', {resolve: {redirect: 'RedirectService'}});

注:我从“Ctrl”键“RedirectService”改变了它,因为你的问题描述什么是不是真的在角意义上的“控制器”。 它不设置范围的视图。 相反,它更像是一个服务,它结束了转向。



Answer 2:

我写基于已接受的答案,并在它的评论中提到的问题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('/');
    }
});

伟大的作品!



文章来源: How to route without a templateUrl?