2015-03-04 9 views
8

si sono occupati di alcuni problemi $ locationProvider su cui sono bloccato. Ho una semplice pagina a pagina singola. Ma sto ottenendo il seguente errore:

 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) 

Il mio file app.js è piuttosto semplice ...

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'; 
          } 
         } 
       } 
      }) 
      ; 
     } 
    ]); 

ho la <base href="http://localhost/apps/uiv8/" /> insieme nel mio file index.html. Quindi, quando commento il codice $ locationProvider, tutto funziona correttamente in # modalità. Posso arrivare a/#/about, ecc. Senza problemi. Non appena ho inserito nuovamente $ locationProvider, niente.

Un po 'di più sul mio ambiente .... Abbiamo MVC di asp.net qui e il route.config sta facendo un {* url} per reindirizzare tutto al percorso predefinito, e ho persino andato fino a modificare IIS con url riscrive per inviare al valore predefinito, ma ottengo ancora l'errore di analisi sopra.

Quindi, qualcuno ha qualche idea su cosa sta succedendo?

Grazie, Nick

+0

BTW, ho controllato, sto eseguendo le versioni più recenti di angular, jquery, & angular-ui-router .... sono andato anche lì nel caso in cui non ero aggiornato. –

+0

L'errore suggerisce che stai chiamando .replace() su qualcosa che non è definito al momento in cui lo stai chiamando, ma il codice che hai postato non mostra dove viene chiamato .replace(). – alex

+2

No, non chiama .replace. Questo è quasi un esempio fuori dalla scatola. Dopo alcune riproduzioni aggiuntive ... ho scoperto che se faccio questo: '

risposta

2

Aggiungi il tag base nella vostra pagina di indice come:

<base href="/"> 

Invece di:

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

auguriamo che possa risolvere il problema.

+0

Risolto per me. Avevo '' e rimuovendo il periodo risolto. – torinagrippa

0

assicurarsi che l'applicazione nome in IIS è lo stesso di ciò che è nel tuo tag base

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

in modo garantire il vostro nome di IIS è app/uiv10

o qualunque combinazione di caso si voglia, ma devono essere uguali.

Problemi correlati