Estou tentando construir um aplicativo angular2 para produção para isso, estou acompanhando este blog . Após minha compilação bem-sucedida do ngc, quando a compilação tsc ocorre, ele gera o erro abaixo mostrado na imagem:
Depois de pesquisar por um tempo encontrei este blog que explica o problema na seção "A propriedade do contexto" que não estou conseguindo entender direito, pode dar uma boa ideia para você do que está acontecendo de errado. basicamente, quando tornamos uma variável privada, obtemos "ERROR: a propriedade é privada e acessível apenas dentro da classe" . Não estou entendendo por que isso está vindo.
Por favor, ajude-nos, pois estamos batendo de cabeça neste problema nos últimos dias.
angular
typescript
typescript-typings
angular2-aot
Sumit Khanduri
fonte
fonte
Respostas:
Para um determinado componente, todos os seus membros (métodos, propriedades) acessados por seu modelo devem ser públicos no cenário de compilação AOT. Isso se deve ao fato de um template ser transformado em uma classe TS. Uma classe gerada e um componente são duas classes separadas agora e você não pode acessar membros privados entre classes.
Resumindo: você não pode acessar membros privados em seus modelos se quiser usar a compilação antecipada.
Para melhor explicação https://github.com/angular/angular/issues/11422
fonte
Talvez outra resposta ainda mais simples seja:
PS ao compilar o
*.ts
código*.js
, AOT se recusa a conectar membros não públicos com o modelo HTML .fonte
Então, resolvi esse problema e vou mantê-lo curto e simples. Para corrigir isso, li este blog profundamente. Como na seção " A propriedade do contexto " A solução para este problema é que não use ou crie uma variável privada se quiser usá-la na visualização diretamente quando estiver criando sua construção com AOT ( ou seja, Ahead Of Time ) para Produção.
*por exemplo *
saída: a propriedade '_initials' é privada e acessível apenas na classe 'ThirdPartyComponent'.
Solução:
atualize isso
private _initials: string;
para simplesmente_initials: string;
Para esta resposta, Harish Gadiya me deu alguma ajuda, então obrigado por isso.
fonte
_name
lá, pode ser o mesmo que você está usandothis.
e outraname
é uma variável localthis.name=name;
this.name=name
noset name
é inf. recursãothis.
name
não é variável, é propriedade do objeto.this.name = name
irá acionar setter (set name(v){}
) naquele objeto. Tão fácil de testar: blitzMaximum call stack size exceeded
Eu entendi quando declarei os injetáveis privados no construtor:
E os usei no modelo:
A solução é:
fonte
Isso funciona para mim: basta mudar o serviço para público.
App funcionando em produção !!
fonte
ok veja que este é realmente um problema simples de javascript es6, se você deve manter o tipo de dados privado, você pode simplesmente fazer isso
fonte
Se você quiser usar o roteador em vista, torne-o público.
Por exemplo:
Eu esqueci até que o Github CI me enviou um e-mail de aviso.
fonte