我正在学习AngularJS,正在开发更深入的ToDo应用程序。我在尝试使用angular限制访问网址或“路由”时遇到问题。
当你在我的机器上点击我的开发网址(todo.ang)时,它会将你带到todo.ang /#/ home,在这个视图中你会看到与每个关联的待办事项类别。 EG(类别= cat,cat有“feed”和“play”的todo),当你点击一个类别我正在调用$ scope.goToCategory函数(在我的JS小提琴中看到)为我的firebase设置一个变量ref然后重定向你/#/ todo。这工作正常。
我的问题是,如果todoRef变量仍未定义,我不希望用户能够访问/#/ todo。但似乎甚至在调用$ scope.goToCategory并将todoRef设置为firebase URL之后,路由器提供者永远不会被召回以知道todoRef已设置为不同的值,因此它总是强制您返回/#/ home。 / p>
代码:
var todoRef = undefined;
if (todoRef !== undefined) {
$routeProvider.when('/todo', {
templateUrl: 'views/todo.html',
controller: 'TodoCtrl'
});
}
$scope.goToCategory = function(catId) {
test = catId;
todoRef = new Firebase("URL HERE");
$location.path('/todo');
}
我没有包含整个代码文件,但如果有必要,我也可以这样做。
答案 0 :(得分:1)
仅在配置阶段设置所有路由。 您的代码中发生的事情是' todo'在启动ngRoute期间忽略路线。
你应该做的是设置路线但是有这样的决心:
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/todo', {
templateUrl: 'views/todo.html',
controller: 'TodoCtrl',
resolve: {
todoRef: ['$q', function($q) {
return todoRef ? todoRef : $q.reject('no ref');
}]
}
});
}]);
如果' todoRef'未定义路线被拒绝。
另外你应该考虑移动&tutoRef'进入服务而非全球范围。
您还可以侦听路线错误,例如重定向到主路线:
app.run(['$rootScope', '$location', function($rootScope, $location) {
$rootScope.$on('$routeChangeError', function() {
$location.path('/home');
});
}]);