2016-03-16 5 views
1

Я не могу сделать Угловые (1.5) маршруты без учета регистра. Я попытался добавить caseInsensitiveMatch: true в конфигурацию маршрута, но мое приложение все равно не загрузится, если я не использую соответствующий случай. Я хочу, чтобы маршруты не учитывались. Вот что мой маршрут конфигурация выглядит следующим образом:AngularJS: Невозможно сделать маршруты нечувствительными к регистру

module SoftwareRegistration { 
    export class Routes { 
     static $inject = ["$routeProvider", "$locationProvider"]; 
     static configureRoutes($routeProvider: ng.route.IRouteProvider, $locationProvider: ng.ILocationProvider) { 
      $locationProvider.html5Mode({ 
       enabled: true, 
       requireBase: true 
      }); 

      $routeProvider.caseInsensitiveMatch = true; 
      $routeProvider 
       .when("/", 
       { 
        controller: "SoftwareRegistration.ListOrdersController", 
        templateUrl: "app/views/order/listOrders.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Orders", 
       { 
        controller: "SoftwareRegistration.ListOrdersController", 
        templateUrl: "app/views/order/listOrders.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Orders/MyOrders", 
       { 
        controller: "SoftwareRegistration.ListOrdersController", 
        templateUrl: "app/views/order/listOrders.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Orders/Create", 
       { 
        controller: "SoftwareRegistration.CreateOrderController", 
        templateUrl: "app/views/order/createOrder.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Orders/PaymentInformation", 
       { 
        templateUrl: "app/views/order/paymentInformation.html", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Orders/:OrderId/AddRecipients", 
       { 
        controller: "SoftwareRegistration.AddRecipientsController", 
        templateUrl: "app/views/order/addRecipients.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .when("/Account/Login", 
       { 
        controller: "SoftwareRegistration.LoginController", 
        templateUrl: "app/views/account/login.html", 
        controllerAs: "vm", 
        caseInsensitiveMatch: true 
       }) 
       .otherwise({ redirectTo: "/", caseInsensitiveMatch: true }); 
     } 
    } 
} 

Когда я перейти к https://myserver.com/SoftwareRegistration он работает отлично. Однако, если я перейти к https://myserver.com/softwareregistration я получаю эту ошибку:

angular.js:12165 Uncaught TypeError: Cannot read property 'replace' of undefined 

Вот источник angular.js: 12165:

function trimEmptyHash(url) { 
    return url.replace(/(#.+)|#$/, '$1'); 
} 

Я должен отметить, что отлично работает на моем локальном (чувствительно к регистру) но не работает, когда я раскрываю в IIS

+0

Опасно здесь, но попробуйте удалить свойство 'caseInsensitiveMatch' как из корневого маршрута (т. Е.' '/" '), Так и для catch в противном случае. В любом случае, они не должны иметь никакого влияния, поскольку текст не подходит. – miqid

+0

все еще не работает ... :( – solidau

+0

как URL передается 'trimEmptyHash'? Или, может быть, что такое значение' url'? –

ответ

2

Я получил обходной путь, что я доволен от этой проблемы: https://github.com/angular/angular.js/issues/3703

Я поставил этот небольшой скрипт б Efore угловой загружаются динамически изменять <base> быть независимо случае пользователь вводит в URL

(function() { 
    var base = document.querySelector("base"); 
    var normalized = RegExp(base.href, "i").exec(location.href); 
    base.href = normalized ? normalized[ 0 ] : base.href; 
}()); 

Это не может быть пригодно во всех ситуациях. Как упоминалось в https://github.com/angular/angular.js/issues/4056, это может «сломать» кеширование. Тем не менее, мне нравится это решение лучше всего, потому что мне не нужно модифицировать источник (или не забудьте изменить его каждый раз, когда я обновляюсь), и мне не нужно возиться с любыми настройками сервера (в любом случае IIS).

+0

Это хорошее решение, но оно не обрабатывается, если пользователь вкл. udes или опускает конечный «/» – Brook

Смежные вопросы