Eu tenho um aplicativo Angular bastante simples que funciona perfeitamente na minha máquina de desenvolvimento, mas está falhando com esta mensagem de erro (no console do navegador) depois de implantá-lo:
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Nenhuma outra mensagem além dessa. Acontece quando a página é carregada pela primeira vez.
Estou executando a ASP.NET MVC5, Angular 1.2RC3 e enviando para o Azure via git.
Googling não encontrou nada de interessante.
Alguma sugestão?
EDITAR:
Estou usando o TypeScript e definindo minhas dependências com a $inject
variável, por exemplo:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Eu acredito que deveria (ou pretende) contornar os problemas de renomeação de variável local que surgem durante a minificação e que podem causar este erro.
Dito isso, claramente tem algo a ver com o processo de minificação, pois quando eu configuro BundleTable.EnableOptimizations = true
minha máquina de desenvolvimento, posso reproduzi-lo.
$inject
variável pública, que acredito ser equivalente à maneira que você sugere (consulte docs.angularjs.org/guide/di ). Vou atualizar minha pergunta.BundleTable.EnableOptimizations = true;
), posso reproduzir o problema. Continuando a olhar.Eu mesmo tive o mesmo problema, mas minhas definições de controlador pareciam um pouco diferentes das anteriores. Para controladores definidos assim:
Basta adicionar uma linha após a declaração indicando quais objetos injetar quando o controlador é instanciado:
Isso o torna seguro para a minimização.
fonte
Esse problema ocorre quando o controlador ou a diretiva não são especificados como uma matriz de dependências e funções. Por exemplo
Quando minimizado O '$ scope' passado para a função do controlador é substituído por um nome de variável de uma única letra. Isso tornará o angular sem noção da dependência. Para evitar isso, passe o nome da dependência junto com a função como um array.
fonte
Se você separou arquivos para angular app \ resources \ directives e outras coisas, você pode simplesmente desabilitar a minificação de seu pacote angular de app desta forma (use new Bundle () em vez de ScriptBundle () no arquivo de configuração do pacote):
E o aplicativo angular apareceria no pacote sem modificações.
fonte
Se você separou arquivos para angular app \ resources \ directives e outras coisas, você pode simplesmente desabilitar a minificação de seu pacote angular de app desta forma (use new Bundle () em vez de ScriptBundle () no arquivo de configuração do pacote):
fonte
Adicione os serviços $ http, $ scope na função do controlador, às vezes, se eles estiverem ausentes, esses erros ocorrerão.
fonte
Eu tive o mesmo problema, mas o problema era diferente, eu estava tentando criar um serviço e passar $ escopo para ele como um parâmetro.
Essa é outra maneira de obter esse erro, pois a documentação desse link diz:
fonte