我有以下Angular功能。
功能:
var App = angular.module('app', ['ui.bootstrap', 'ngRoute', 'ngAnimate']); App.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/dashboard.html' }) .when('/:pages', { templateUrl: function(routeParams) { return 'views/' + routeParams.pages + '.html'; } }) .otherwise({redirectTo: '404.html'}) }]);
我有侧边栏导航控件。我已经创建了4页。
因此,当我点击这些导航项时,相应的页面会正确打开。
还有一些我尚未创建的页面。但是按照以下功能。
当我没有不存在的东西时,它必须返回到文件夹根目录中的404.html
文件。
发生的事情是,我在控制台中没有收到错误,地址栏中的网址反映了最后点击的有效页面。
有人让我知道我在哪里犯了错误,这种方法对于动态路由是否正确?
答案 0 :(得分:2)
otherwise()
部分捕获与任何指定路线不匹配的路径
在您的情况下,路由匹配,但模板在指定的URL处不可用
$routeProvider
对此一无所知,也无能为力。
你能做什么,以某种方式(见下文)检查模板是否可用以及是否使用$location
重定向到适当的路径(例如{{1} })。
为了确定页面是否有效(即其模板是否可用),您可以尝试访问模板(使用/error/404
)并捕获任何错误(表示没有模板)等。但我不喜欢不喜欢这种方法(因为依赖于模板的可用性来确定页面的存在/有效性不是一个非常好的实践 - 例如,在网络或服务器问题等情况下,它很容易导致误导性的错误消息)
我最喜欢的方法是保留“有效”/现有页面的列表并检查它。如果当前页面可用,请像往常一样继续获取模板等。如果没有,请重定向到错误页面。
上面描述的逻辑可以放在$http
的{{1}}属性中(因此它会在实例化控制器并加载视图之前执行)。
E.g:
$routeProvider
另请参阅此 short demo 。
答案 1 :(得分:0)
为每个页面创建路径定义的最简单的解决方案,而不是通用的。例如 .when('/ page1',...) .when('/ page2',...) 等等
答案 2 :(得分:-1)
redirect要更新$ location,因此您不必指定.html,而是指定routeParameter。
你最好这样做:
[...]
.when('/error', { templateUrl: '404.html' })
.otherwise({redirectTo: '/error'});