Em um aplicativo Angular, eu vi que @Component
tem propriedade moduleId
. O que isso significa?
E quando module.id
não está definido em nenhum lugar, o aplicativo ainda funciona. Como ainda pode funcionar?
@Component({
moduleId: module.id,
selector: 'ng-app',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
directives: [AppComponent]
});
angular
systemjs
angular2-components
Nishchit Dhanani
fonte
fonte
Respostas:
A versão beta do Angular (desde a versão 2-alpha.51) suporta ativos relativos para componentes, como templateUrl e styleUrls no
@Component
decorador.module.id
funciona ao usar o CommonJS. Você não precisa se preocupar com como isso funciona.Fonte da publicação de Justin Schwartzenberger , graças a @Pradeep Jain
Atualização em 16 de setembro de 2016:
fonte
Atualização para (13/03/2017) :
Fonte: https://angular.io/docs/ts/latest/guide/change-log.html
Definição:
moduleId
parâmetro dentro da@Component
anotação assume umstring
valor que é;" A identificação do módulo que contém o componente. "
Uso commonjs:
module.id
,Uso do SystemJS:
__moduleName
Razão para usar
moduleId
:moduleId
é usado para resolver caminhos relativos para suas folhas de estilo e modelos, conforme indicado na documentação.ref (antigo): https://angular.io/docs/js/latest/api/core/index/ComponentMetadata-class.html
ref: https://angular.io/docs/ts/latest/cookbook/component-relative-paths.html
Exemplo de uso:
Estrutura de pastas:
Sem module.id :
Com module.id :
tsconfig.json:
fonte
map
chaves dentro da sua configuração. Likeapp
.templateUrl: 'app/components/my.component.html', styleUrls: ['app/components/my.component.css']
Se você receber
typescript error
, apenasdeclare
a variável em seu arquivo.UPDATE - December 08, 2016
A
module
palavra-chave está disponível emnode
. Portanto, se você instalar@types/node
, no seu projeto, você terá amodule
palavra-chave disponível automaticamente em seus arquivos datilografados sem precisardeclare
.npm install -D @types/node
Dependendo da sua configuração, talvez você precise incluir isso em seu
tsconfig.json
arquivo para obter as ferramentas :Boa sorte
fonte
ng build --prod --aot
trabalhonpm install -D @types/node
depois de passar muito tempo brincando:)moduleId: 'module.id'
(note as aspas simples ao redor module.id)module.id
como uma string. Se funcionou, algo parece estar incorreto. Você pode precisar pesquisar mais isso.Além das excelentes explicações
echonax
eNishchit Dhanani
quero acrescentar, eu realmente odeio a população de componentesmodule.id
. Especialmente, se você tem suporte para a compilação AoT (antecipada ) e para um projeto realista, é isso que você deve procurar, não há lugar para algo como osmodule.id
metadados de seus componentes.Dos documentos :
Eu acho que ter essa linha na versão de produção do
index.html
arquivo não é absolutamente aceitável!Portanto, o objetivo é ter uma compilação JiT (just-in-time) para desenvolvimento e suporte ao AoT para produção com a seguinte definição de metadados de componente: (sem
moduleId: module.id
linha)Ao mesmo tempo, gostaria de colocar estilos, like
my.component.css
e arquivos de modelo, comomy.component.html
relativo aosmy.component.ts
caminhos de arquivo do componente .Para conseguir tudo isso, a solução que estou usando é hospedar servidor da Web (lite-server ou browser-sync) durante a fase de desenvolvimento de várias fontes de diretório!
bs-config.json
:Por favor, dê uma olhada nesta resposta para me detalhes.
O projeto de início rápido angular 2 exemplar, que se baseia nessa abordagem, está hospedado aqui .
fonte
Conforme o documento Angular, você não deve usar @Component ({moduleId: module.id})
Ref: https://angular.io/docs/ts/latest/guide/change-log.html
Aqui está o texto relevante dessa página:
Todas as menções de moduleId removidas. Livro de receitas "Caminhos relativos aos componentes" excluído (13-03-2017)
Adicionamos um novo plugin SystemJS (
systemjs-angular-loader.js
) à nossa configuração recomendada do SystemJS. Este plug-in converte dinamicamente caminhos "relativos ao componente" em templateUrl e styleUrls em "caminhos absolutos" para você.Recomendamos que você escreva apenas caminhos relativos aos componentes. Essa é a única forma de URL discutida nesses documentos. Você não precisa mais escrever
@Component({ moduleId: module.id })
, nem deveria.fonte
Parece que se você estiver usando "module": "es6" no tsconfig.json, não precisará usar isso :)
fonte
Esse valor moduleId é usado pelos processos de reflexão angular e pelo componente metadata_resolver para avaliar o caminho completo do componente antes da construção do componente.
fonte
A adição
moduleId: module.id
corrige vários problemas que podem ocorrer ao criar aplicativos angulares nativos e aplicativos da web angulares. É uma prática recomendada usá-lo.Também permite que o componente procure arquivos no diretório atual, e não na pasta superior
fonte