angularjs – ng-switch não liga ng-model

Eu tenho essa reprodução http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq que mostra quando eu clico em ‘Title3’ e insiro um valor na checkbox de texto, embora o valor inserido seja refletido na interface do usuário, quando clico no botão ‘click’, nada é binded para o atributo de escopo $ scope.test.

Eu não sei o que está errado com o ng-switch ou talvez eu esteja fazendo algo errado. Ajuda é apreciada !!!

http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq

Este é um problema de inheritance de escopo devido ao ng-switch criar seu próprio escopo.

Uma recomendação feita frequentemente é sempre usar um dot nos modelos. O motivo é que, quando o item de escopo do controlador é um object e não um primitivo, os subescópios criarão uma referência ao object inicial. Se o modelo é primitivo, não atualizará o original.

Por exemplo:

  
 $scope.test={value:''} 

Outra abordagem é usar $parent na marcação de modelo html:

  

Usar a metodologia de dot é uma boa prática para evitar esses problemas, já que você não precisa pensar em escopos nesteds mais profundos.

Demonstração usando test.value como modelo: http://plnkr.co/edit/CkiF55bLXsYzR6ZjcrJp?p=preview

Referência sobre modelos de dot (leitura valiosa): https://github.com/angular/angular.js/wiki/Understanding-Scopes

Isto é porque você está realmente criando um escopo filho dentro do ng-switch. Portanto, outra propriedade de test existe em um escopo pertencente à diretiva ngSwitch. Inicialmente, ele mostrará o valor do escopo pai, mas quando você o edita, por ser primitivo, ele só edita o valor no filho, não no pai. A inheritance prototípica não entra em jogo aqui (mas é disso que precisamos).

Quando você clica no botão, o botão está alertando / console.logging a propriedade no escopo pai … que o filho não pode alterar.

Para corrigir isso use $parent.test no seu atributo ng-model em seu ngSwitch:

um trecho:

   {{test}}  

E aqui está um garfo do seu plunker mostrando isso em ação.

Eu encontrei um problema semelhante e resolvi criando uma variável de escopo no controlador e usei isso com ng-include e ng-switch . Desta forma, se você tiver nested ng-include -sets com ng-switch e continuar, ainda podemos usar diretamente essa variável de escopo.

Como todos os escopos filho (aqui, ng-include / ng-switch ) se estendem do escopo pai (geralmente, escopo dos controladores), podemos acessar o escopo pai diretamente a partir desses escopos filho sem problemas.

Usar $parent requererá escrever como $parent.$parent.$parent.someProp

Exemplo de Plunk: http://plnkr.co/edit/8UGH7nUpFmATiXfkYSwr?p=preview