angularjs – ng-switch no enlaza ng-model

Tengo este repro http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq que aparece cuando hago clic en ‘Title3’ e ingreso un valor en el cuadro de texto aunque el valor ingresado se muestra reflejado en la interfaz de usuario, cuando hago clic en el botón ‘clic’ no hay nada enlazado para el atributo de scope $ scope.test.

No sé lo que está mal con ng-switch o tal vez estoy haciendo algo mal. ¡Ayuda es apreciada!

http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq

Este es un problema de herencia de scope debido a que ng-switch crea su propio scope.

Una recomendación que se hace a menudo es usar un dot en los modelos. El motivo es que cuando el elemento de ámbito del controlador es un objeto y no una primitiva, los subcampos crearán una referencia al objeto inicial. Si el modelo es un primitivo, no actualizará el original.

Por ejemplo:

  
 $scope.test={value:''} 

Otro enfoque es usar $parent en el marcado del modelo html:

  

El uso de la metodología de dot es una buena práctica para evitar estos problemas, ya que no necesita pensar en ámbitos nesteds más profundos.

Demostración utilizando test.value como modelo: http://plnkr.co/edit/CkiF55bLXsYzR6ZjcrJp?p=preview

Referencia sobre el dot en los modelos (lectura valiosa): https://github.com/angular/angular.js/wiki/ Understanding – Scopes

Esto se debe a que en realidad está creando un ámbito hijo dentro del conmutador ng. De modo que existe otra propiedad de test en un ámbito que pertenece a la directiva ngSwitch. Inicialmente mostrará el valor de su ámbito principal, pero cuando lo edite, dado que es un elemento primitivo, solo edita el valor en el elemento secundario, no en el primario. La herencia prototípica no entra en juego aquí (pero eso es lo que necesitamos).

Cuando hace clic en el botón, el botón alerta / console.logging la propiedad en el scope principal … que el niño no puede cambiar.

Para solucionar este problema, use $parent.test en su atributo ng-model en su ngSwitch:

un fragmento:

   {{test}}  

Y aquí hay un tenedor de tu plunker que lo muestra en acción.

Me he encontrado con un problema similar, y lo resolví creando una variable de ámbito en el controlador y lo usé con ng-include y ng-switch . De esta manera, si ha nested ng-include ‘s profundamente con ng-switch y continúa, todavía podemos usar directamente esa variable de ámbito.

Como todos los ámbitos secundarios (aquí, ng-include / ng-switch ) se extienden desde el scope principal (generalmente, el scope de los controladores), podemos acceder al ámbito principal directamente desde en estos ámbitos secundarios sin ningún problema.

El uso de $parent requerirá escribir como $parent.$parent.$parent.someProp

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