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
BTW, sprawdziłem, używam najnowszych wersji kątowego, jquery i kątowego-routera ... poszedłem tam, na wypadek, gdybym był nieaktualny. –
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
Nie, nie dzwonię .replace. Jest to prawie nieoczekiwany przykład. Po dodatkowej grze ... Zauważyłem, że jeśli to zrobię: '