Tenho dois controladores, um dentro do outro. Agora eu sei que o escopo filho herda propriedades do escopo pai, mas há uma maneira de atualizar a variável de escopo pai? Até agora não encontrei nenhuma solução óbvia.
Na minha situação, tenho um controlador de calendário em um formulário. Gostaria de atualizar as datas de início e término do escopo pai (que é o formulário) para que o formulário tenha as datas de início e término ao ser enviado.
Respostas:
Você precisa usar um objeto (não um primitivo) no escopo pai e então você será capaz de atualizá-lo diretamente do escopo filho
Pai:
Criança:
Demonstração de trabalho : http://jsfiddle.net/sh0ber/xxNxj/
Consulte Quais são as nuances da herança prototípica / prototípica do escopo no AngularJS?
fonte
Existe mais uma maneira de fazer esta tarefa e não usar a
$scope.$parent
variável.Basta preparar um método para alterar o valor no escopo pai e usá-lo no filho um. Como isso:
Também funciona e oferece mais controle sobre as alterações de valor.
Você pode, então, também chamar o método, mesmo em HTML como:
<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
.fonte
Isso também funciona (mas não tenho certeza se segue as práticas recomendadas ou não)
fonte
Quando você atribui um atributo primitivo a um escopo, ele é sempre local para o escopo (possivelmente criado em tempo real), mesmo se um escopo pai tiver um atributo com o mesmo nome. Esta é uma decisão de design, e uma boa IMHO.
Se você precisar alterar alguma primitiva (ints, booleanos, strings) no escopo pai, na visualização, você precisa que seja um atributo de outro objeto nesse escopo, então a atribuição pode ser:
e irá, por sua vez:
viewData
objeto de qualquer escopo definido emmyAttr
atributo.fonte
Para acessar variáveis declaradas no pai, devemos usar $ pai no controlador filho ou arquivo de modelo
No controlador
Em modelo html
fonte