ao definir directivas em AngularJS, existem três formas diferentes de passar em variáveis: nenhum âmbito, âmbito herdado ou âmbito isolado. Se você está usando ou não a sintaxe” controller as ” (e eu espero que você esteja), você ainda tem que decidir qual usar. Neste post, vou explicar as diferenças e sugerir Por que você pode—ou não—quer usar cada um.
no Âmbito da
scope: false
Usando este tipo de directiva âmbito é normalmente uma má prática que deve ser evitada. Ao escolher esta opção, está a especificar que a sua directiva não tem âmbito próprio e partilha um âmbito com o seu controlador-mãe. Tudo o que o controlador-mãe alterar ou acrescentar ao âmbito de aplicação estará presente na Directiva, e vice-versa.
meu post anterior demonstrou um exemplo positivo de usar scope: false
em Diretivas. Neste exemplo, usei-o para trocar limpo DOM no modelo da minha directiva de nível superior, e todas as directivas estavam a servir o mesmo propósito simples (mudar super-heróis) na minha aplicação. Eu acho que scope: false
pode ser uma ótima maneira de introduzir organização e legibilidade em um modelo, mas além disso, usá-lo pode ser um slippery slope para o código de esparguete que é difícil de entender.
âmbito herdado
scope: true
âmbito herdado é muito mais seguro para os dados do seu controlador-mãe do que nenhum âmbito. Tal como acontece com a opção scope: false
, tudo o que existe no âmbito do controlador-mãe está presente na Directiva. No entanto, tudo o que a Directiva acrescenta ao âmbito de aplicação não é partilhado com o âmbito de aplicação da Directiva-mãe. Isto protege os dados do controlador-mãe, permitindo simultaneamente que sejam partilhados com a Directiva.
scope: true
é útil em situações em que a directiva relativa à criança serve para alterar dados sobre o âmbito de aplicação dos pais. Embora mais seguro que scope:false
, usando escopo herdado, especialmente repetidamente, é um cheiro arquitetônico.
âmbito isolado
scope: { myProperty: '='}
âmbito isolado é a melhor prática de todos eles. Com esta opção, o programador define quais atributos são passados para a diretiva. Nada mais é partilhado entre o controlador-mãe e a Directiva.
âmbito isolado encoraja (e reforça) a boa arquitetura de SPA e o desenvolvimento de pequenos componentes focados. O uso de escopo isolado (especialmente com a sintaxe” controller as”) É um sinal de boa arquitetura, e resulta em uma diretriz que será fácil de converter para um componente Angular 2.0.
… Então, qual é que eu uso?
tudo depende! Em uma aplicação Angular perfeita, você usaria escopo isolado em todas as suas diretivas. No entanto, nem todas as aplicações são perfeitas, e nem todas as regras são absolutas.
- usando nenhum escopo pode ser útil para organizar seus modelos.o uso de escopo hereditário pode ajudá-lo a refinar as diretivas de escopo. Também é útil para gerenciar arquiteturas que se concentram em Alterar dados na árvore de diretriz, em vez de devolver pequenos pedaços de dados atualizados até a árvore de volta para o controlador-mãe.
- para a migração regular Angular 2. 0, deve começar a trabalhar apenas com o uso de um âmbito isolado na sua aplicação.