Mam dość prostą aplikację Angular, która działa dobrze na moim komputerze deweloperskim, ale nie wyświetla tego komunikatu o błędzie (w konsoli przeglądarki) po jej wdrożeniu:
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Żadna inna wiadomość poza tym. Dzieje się tak, gdy strona ładuje się po raz pierwszy.
Używam ASP.NET MVC5, Angular 1.2RC3 i wypycham na platformę Azure za pośrednictwem git.
Googlowanie nie przyniosło nic interesującego.
Jakieś sugestie?
EDYTOWAĆ:
Używam TypeScript i definiuję moje zależności ze $inject
zmienną, np:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Uważam, że powinno (lub ma na celu) obejście problemów związanych ze zmianą nazw zmiennych lokalnych, które pojawiają się podczas minifikacji i które mogą powodować ten błąd.
To powiedziawszy, ma to oczywiście coś wspólnego z procesem minifikacji, ponieważ kiedy ustawiam BundleTable.EnableOptimizations = true
na mojej maszynie deweloperskiej , mogę to odtworzyć.
$inject
zmiennej publicznej, co moim zdaniem jest równoważne z sugerowanym przez Ciebie sposobem (patrz docs.angularjs.org/guide/di ). Zaktualizuję moje pytanie.BundleTable.EnableOptimizations = true;
), mogę odtworzyć problem. Ciągle patrzę.Sam napotkałem ten sam problem, ale definicje kontrolera wyglądały trochę inaczej niż powyżej. W przypadku kontrolerów zdefiniowanych w ten sposób:
Po prostu dodaj wiersz po deklaracji wskazujący, które obiekty mają zostać wstrzyknięte podczas tworzenia instancji kontrolera:
Dzięki temu jest bezpieczny dla minifikacji.
źródło
Ten problem występuje, gdy kontroler lub dyrektywa nie są określone jako tablica zależności i funkcji. Na przykład
Po zminimalizowaniu „$ scope” przekazany do funkcji kontrolera jest zastępowany jednoliterową nazwą zmiennej. To sprawi, że kątownik nie będzie miał pojęcia o zależności. Aby tego uniknąć, należy przekazać nazwę zależności wraz z funkcją jako tablicę.
źródło
Jeśli oddzieliłeś pliki dla dyrektyw angular app \ resources \ i innych rzeczy, możesz po prostu wyłączyć minifikację pakietu aplikacji kątowej w ten sposób (użyj new Bundle () zamiast ScriptBundle () w pliku konfiguracyjnym pakietu):
A aplikacja kątowa pojawiłaby się w pakiecie bez modyfikacji.
źródło
Jeśli oddzieliłeś pliki dla dyrektyw angular app \ resources \ i innych rzeczy, możesz po prostu wyłączyć minifikację pakietu aplikacji kątowej w ten sposób (użyj new Bundle () zamiast ScriptBundle () w pliku konfiguracyjnym pakietu):
źródło
Dodaj usługi $ http, $ scope do funkcji kontrolera, czasami, jeśli ich brakuje, występują te błędy.
źródło
Miałem ten sam problem, ale problem był inny, próbowałem utworzyć usługę i przekazać do niej $ scope jako parametr.
To inny sposób na uzyskanie tego błędu, ponieważ dokumentacja tego linku mówi:
źródło