Qual é a melhor maneira de excluir um componente com a CLI


227

Eu tentei usar "ng destroy component foo" e ele me diz "O comando destroy não é suportado pelo Angular-CLI"

Como podemos excluir corretamente os componentes com o Angular CLI?


2
Ainda não há suporte para a CLI, no entanto, se você certificou-se de que as alterações mais antigas sejam confirmadas pelo git antes de criar o componente, basta remover os novos arquivos e fazer check-out dos itens alterados (ou apenas git checkout src).
precisa saber é o seguinte

É um truque inteligente. Funciona com certeza. A equipe angular precisará resolver esse problema mais cedo ou mais tarde. Eu acho que eles estão atualmente ocupados com outros problemas. Mas, por enquanto, temos que conviver com sua solução. Poste isso como resposta. @SanjayVerma
Aman

Respostas:


167

destroyou algo semelhante pode chegar à CLI, mas não é o foco principal no momento. Então você precisará fazer isso manualmente.

Exclua o diretório de componentes (supondo que você não tenha usado --flat) e remova-o do diretório NgModuleem que está declarado.

Se você não tiver certeza do que fazer, sugiro que você tenha um aplicativo "limpo", o que significa que não há gitalterações atuais . Em seguida, gere um componente e veja o que foi alterado no repositório para que você possa voltar a partir daí o que precisará fazer para excluir um componente.

Atualizar

Se você está apenas experimentando o que deseja gerar, pode usar o --dry-runsinalizador para não produzir nenhum arquivo em disco; basta ver a lista de arquivos atualizada.


132
  1. Exclua a pasta que contém este componente.
  2. No app.module.ts remova a instrução de importação para este componente e remova seu nome da seção de declaração de @NgModule
  3. Remova a linha com a instrução de exportação para este componente de index.ts.

12
onde está o index.ts? Obrigado
Shane G

40
nas versões mais recentes da CLI, eles não a geram.
Yakov Fain

7
Acho que falta mais um passo ... executar o serviço novamente, não é?
gsalgadotoledo

index.ts? Não está em 5
Andrew Koper

2
em Angular6, necessidade de remover a instrução de importação de app-routing.module.ts
tyro

26

Como ainda não é suportado usando CLI angular

então, aqui está a maneira possível: antes disso, observe o que acontece quando você cria um componente / serviço usando a CLI (ex. ng g c demoComponent).

  1. Ele cria uma pasta separada chamada demoComponent( ng g c demoComponent).
  2. Ele gera HTML,CSS,tse um specarquivo dedicado ao demoComponent.
  3. Além disso, ele adiciona dependência ao arquivo app.module.ts para adicionar esse componente ao seu projeto.

faça-o na ordem inversa

  1. Remover dependência de app.module.ts
  2. Exclua a pasta do componente.

ao remover a dependência, você deve fazer duas coisas.

  1. Remova a referência da linha de importação do arquivo app.module.ts.
  2. Remova a declaração do componente da matriz de declaração @NgModule em app.module.ts.

11

Usando o Visual Studio Code, exclua a pasta do componente e veja no Project Explorer (lado esquerdo) os arquivos com a cor vermelha, o que significa que os arquivos são afetados e geraram erros. Abra cada arquivo e remova o código que usa o componente.


11

Atualmente, a Angular CLI não suporta uma opção para remover o componente, você precisa fazê-lo manualmente.

  1. Remova as referências de importação para cada componente do app.module
  2. Excluir pastas de componentes.
  3. Você também precisa remover a declaração do componente da matriz de declaração @NgModule no arquivo app.module.ts

5

Eu escrevi um script bash que deve automatizar o processo escrito por Yakov Fain abaixo. Pode ser chamado como ./removeComponent myComponentName Isso foi testado apenas com o Angular 6

#!/bin/bash
if [ "$#" -ne 1 ]; then
    echo "Input a component to delete"
    exit 1
fi

# finds folder with component name and deletes
find . -type d -name $1 | xargs rm -rf

# removes lines referencing the component from app.module.ts
grep -v $1 app.module.ts > temp
mv temp app.module.ts

componentName=$1
componentName+="Component"

grep -v -i $componentName app.module.ts > temp
mv temp app.module.ts

Por favor, adicione uma nota para mim mudar isso se o cli angular muda no futuro
Aidan Grimshaw

3

Não tenho certeza se é o melhor caminho, mas funcionou para mim.

  • Primeiro, apaguei a pasta do componente.
  • Em seguida, limpei app.module.ts, app.component.ts & app.component.html das importações e declarações relacionadas ao componente que eu queria excluir.
  • Da mesma forma, limpei main.ts.

Acabei de salvar e atualizar o aplicativo e ele funcionou.


3

Resposta para Angular 2+

Remova o componente from imports and declaration arrayde app.modules.ts.

Segundo cheque, sua referência é adicionada em outro módulo; se sim, remova-o e

finalmente delete that component Manuallydo aplicativo e pronto.

Ou você pode fazer isso na ordem inversa também.


2

Em app.module.ts:

  • apagar linha de importação para o componente específico;
  • apague sua declaração de @NgModule;

Em seguida, exclua a pasta do componente que deseja excluir e seus arquivos incluídos ( .component.ts, .component.html, .component.csse .component.spec.ts).

Feito.

-

Eu li pessoas dizendo sobre apagá-lo do main.ts. Você não deveria importá-lo de lá em primeiro lugar, pois ele já importa o AppModule, e AppModule é o único que importa todos os componentes que você criou.


2

Eu precisava excluir uma diretiva Angular 6 cujo arquivo de especificações estivesse errado. Mesmo depois de excluir os arquivos incorretos, remover todas as referências a ele e reconstruir o aplicativo, o TS ainda estava relatando o mesmo erro. O que funcionou para mim foi reiniciar o Visual Studio - isso limpou o erro e todos os vestígios da antiga diretiva indesejada.


0

Primeiro, remova a pasta do componente, que você deve excluir e, em seguida, remova as entradas que você criou nos arquivos "ts".


0

Se você está procurando algum comando na CLI, então ans é NO por enquanto. Mas você pode fazer isso manualmente excluindo a pasta do componente e todas as referências.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.