Qual é a vantagem do “Controller as” em Angular?

Qual é a vantagem de usar a syntax “Controller as” em Angular? É apenas para criar um alias para um controlador ou tem algumas outras razões técnicas nos bastidores?

Eu sou novo no Angular e quero saber mais sobre essa syntax.

controllerAs -syntax tem múltiplas vantagens:

Clartiy

Considere o seguinte exemplo:

 

Improve your life!

We talk about {{topic}} a lot, but do we really understand it? Read this article to enhance your knowledge about {{topic}}

Apenas lendo este pedaço de código, você não pode dizer de onde vem o topic . Pertence ao containerController , ao paragraphController ou é apenas uma variável de escopo flutuante random da input sone acima?

Usando controllerAs é muito claro:

 

Improve your life!

We talk about {{paragraph.topic}} a lot, but do we really understand it? Read this article to enhance your knowledge about {{paragraph.topic}}

Você pode ver imediatamente que o topic é uma propriedade de paragraphController . Isso torna o código muito mais legível no geral, pois força o desenvolvedor a deixar claro quem são as funções e as variables ​​no scope .

Vinculação a propriedades

Quando você está usando a syntax antiga do controller , coisas estranhas podem acontecer quando você tem várias ligações em diferentes escopos para a variável “same”. Considere este exemplo:

 

Parece que ambos os input s estão ligados à mesma variável. Eles não são. Tudo parece funcionar bem quando você edita a primeira input primeiro, mas assim que você edita a segunda, ela não será mais sincronizada. Isso tem a ver com a maneira como o trabalho de inheritance e vinculação de escopo ( e há uma excelente resposta sobre isso em SO ). Isso não acontece quando você liga as propriedades do object (também conhecido como quando há um . No seu ng-model -attribute). Com o controllerAs você liga-se às propriedades dos objects do controlador de qualquer maneira, portanto resolve naturalmente esse problema:

 

Ele se livra do scope (principalmente)

O uso do scope para criar ligações para o controller s em código angular antigo é difícil de ler, difícil de entender e completamente desnecessário se você usar controllerAs . Você não precisa mais injetar o scope em cada controller , na verdade, você provavelmente não o injetará em qualquer um dos aplicativos (você ainda precisa fazer isso se quiser usar o sistema de events angulares). Isso resulta em um código controlador mais limpo com clichê menos estranho.

Prepara-se para Angular 2

Em angular 2, o scope será eliminado e escreveremos tudo como componentes . Usar controllerAs permite trabalhar sem scope e forçá-lo a pensar mais em componentes, preparando-o (e os aplicativos que você eventualmente desejará migrar) para a atualização 2.0.