如何在angular $ routeProvider中基于Condition重定向视图

时间:2015-03-27 13:41:14

标签: asp.net-mvc angularjs

我正在使用angularjs并使用下面的代码

$routeProvider
    .when('/Home', {
        templateUrl: 'views/home.html',
        controller: 'HomeCtrl'
    })
    .when('/login', {
        templateUrl: 'views/login.html',
        controller: 'LoginCtrl',
    .otherwise({
            redirectTo: '/About'
    })

在这里,我该如何设置条件 如果文件“help.html”存在于项目部署文件夹(如D:\ project \ Code \ help.cshtml)上,那么页面应该重定向,或者我们可以说它应该打开帮助页面“help.cshtml。

如果没有,那么我的正常路线应该有效。 请建议最佳方法。

1 个答案:

答案 0 :(得分:1)

您可以通过收听$routeChangeError事件拦截路线错误。

var app = angular.module('myApp', ['ngRoute']);

app.config(function ($routeProvider) {
  $routeProvider.when('/', {
    templateUrl: 'home.html',
  }).when('/profile', {
    templateUrl: 'profile.html'
  }).when('/help', {
    // The help.html does not exist
    templateUrl: 'help.html', 
    // Set a custom property we'll use to redirect to if needed
    redirectOnError: '/help-not-found' 
  }).when('/help-not-found', {
    templateUrl: 'help-not-found.html'
  }).otherwise({
    redirectTo: '/'
  });
});

app.controller('MainCtrl', function($scope, $location) {

  // Listen for route errors

  $scope.$on('$routeChangeError', function(event, current) {

    // And if the route contains our custom property ...

    if(current.$$route.redirectOnError) {

      console.log('Redirecting to ' + current.$$route.redirectOnError);

      // Redirect to that route

      $location.path(current.$$route.redirectOnError);
    }
  });

});

在此plunker中查看此操作。