在AngularJS中使用ui路由器时,如何防止浏览器中的直接templateurl导航?

在AngularJS中使用ui路由器时,如何防止浏览器中的直接templateurl导航?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,以下是我的代码: var app = angular .module('moviesApp', ['ui.router']) .config(function ($stateProvider, $locationProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/SignIn');

以下是我的代码:

var app = angular
            .module('moviesApp', ['ui.router'])
            .config(function ($stateProvider, $locationProvider, $urlRouterProvider) {          
                $urlRouterProvider.otherwise('/SignIn');          
                $stateProvider
                    .state("SignIn", {
                        url: "/SignIn",
                        templateUrl: "Pages/SignIn.html"
                    })
                    .state("SignUp", {
                        url: "/SignUp",
                        templateUrl: "Pages/SignUp.html"
                    }); 
                $locationProvider.html5Mode(true);
            });
当我加载状态-“/SignIn”时,它会按预期加载ui视图中“Pages/SignIn.html”的内容。类似地,当我加载另一个状态-“/SignUp”时,它会在ui视图中加载“Pages/SignUp.html”的内容

我的要求是什么?

我希望“Pages/SignIn.html”或“Pages/SignUp.html”仅通过ui视图中的状态加载。它们不应通过浏览器中的直接URL导航加载

换句话说,当我直接在浏览器的地址栏中键入“/Pages/SignIn.html”时,它应该被重定向到状态“/SignIn”

“Pages”文件夹下html文件的内容不应通过直接url导航显示


我怎样才能做到这一点?请告知。

为防止其显示在地址栏中,请使用名称而不是url

    $stateProvider.state('default', {
        url:'',
        templateUrl: ctx + '/jsp/home/dashboard.jsp'
    }).state({
        name:'/test',
        templateUrl: ctx + '/jsp/home/testview.jsp'
    });
在html页面中,如下所示

<a ui-sref="test">test view</a></li>
测试视图

你为什么在意?为什么会有人去/Pages/SignIn.html,这样做并仅仅获取模板有什么问题?如果你愿意,你可以在JS包中嵌入htm模板,但我真的不明白你为什么要这么做。嗨,谢谢你的回复。如果用户查看直接加载时看起来未格式化的模板,这不是问题吗?当然,没有功能问题。没有人会直接加载它们。我只是想知道,当使用ui路由器时,是否每个人都是这样处理模板的。请给出建议。如果有人技术娴熟,能够分析网络流量,使用AJAX检测页面加载的内容,然后直接加载模板,那么他/她得到HTML模板时不应该感到惊讶,也不应该抱怨您的网站没有按预期工作。就像他/她直接加载JSON资源并返回JSON、CSS文件或JS文件一样。这没问题,先生,谢谢你。你的解释很清楚。我把你的答复记为答案。