2015-03-04 10 views
8

zajmowałem się problemami z $ locationProvider, na których utknąłem. Mam prostą stronę jednej strony. Ale ja otrzymuję następujący błąd:

 TypeError: Cannot read property 'replace' of undefined 
     at trimEmptyHash (angular.js:10551) 
     at Object.$locationWatch (angular.js:11399) 
     at Scope.$get.Scope.$digest (angular.js:14217) 
     at Scope.$get.Scope.$apply (angular.js:14488) 
     at bootstrapApply (angular.js:1449) 
     at Object.invoke (angular.js:4182) 
     at doBootstrap (angular.js:1447) 
     at bootstrap (angular.js:1467) 
     at angularInit (angular.js:1361) 
     at HTMLDocument.<anonymous> (angular.js:26065) 

Mój plik app.js jest dość proste ...

var app = angular.module('app', 
     [ 
      'ui.router' 
     ] 
    ); 

    app.config([ 
     '$stateProvider', 
     '$httpProvider', 
     '$locationProvider', 
     '$urlRouterProvider', 
     function ($stateProvider, $httpProvider, $locationProvider, $urlRouterProvider) { 

      $locationProvider.hashPrefix('!'); 
      $locationProvider.html5Mode(true); 

      $stateProvider 
      .state('home', 
      { 
       url: '/', 
       views: { 
        'aboutView': 
         { 
          template: function (params) { 
           console.log("home"); 
           return 'home'; 
          } 
         } 
       } 
      }) 
      .state('about', 
      { 
       url: '/about', 
       views: { 
        'aboutView': 
         { 
          template: function (params) { 
           console.log('about') 
           return 'about'; 
          } 
         } 
       } 
      }) 
      ; 
     } 
    ]); 

mam zestaw w moim pliku index.html <base href="http://localhost/apps/uiv8/" />. Kiedy skomentuję kod $ locationProvider, wszystko działa poprawnie w trybie #. Mogę dostać się do/#/about, itd. Bez problemu. Jak tylko włożę części $ locationProvider z powrotem, nic.

Trochę więcej o moim środowisku .... Mamy tutaj MVC asp.net, a route.config robi {* url}, aby przekierować wszystko na domyślną trasę, a ja nawet posunął się aż do modyfikacji IIS z przepisywaniem adresów URL, aby wysłać do domyślnego, ale nadal otrzymuję błąd parsowania powyżej.

Więc, ktoś ma jakieś pomysły, co się dzieje?

Dzięki Nick

+0

BTW, sprawdziłem, używam najnowszych wersji kątowego, jquery i kątowego-routera ... poszedłem tam, na wypadek, gdybym był nieaktualny. –

+0

Błąd sugeruje, że wywołujesz .replace() w przypadku czegoś, co nie jest zdefiniowane w czasie, w którym go wywołujesz, ale kod, który wysłałeś, nie pokazuje miejsca wywołania metody .replace(). – alex

+2

Nie, nie dzwonię .replace. Jest to prawie nieoczekiwany przykład. Po dodatkowej grze ... Zauważyłem, że jeśli to zrobię: '

Odpowiedz

2

Dodaj tag bazowy na stronie indeksu, takich jak:

<base href="/"> 

Zamiast:

<base href="http://localhost/apps/uiv8/" /> 

nadzieję, że to rozwiąże problem.

+0

Rozwiązałem to dla mnie. Miałem ' i usunięcie okresu rozwiązało go. – torinagrippa

0

Upewnij się, że Nazwa aplikacji w IIS jest takie samo jak to, co jest w tagu bazowej

<base href='http://localhost/apps/uiv10'> 

więc zapewnić swoje imię IIS jest app/uiv10

lub cokolwiek combo przypadku chcesz, ale muszą być takie same.