angularjs - example - no provider for ngswitch
ngModel con ngSwitch, ¿no puedes ver las variables de cadena? (1)
Esto tiene que ver con el alcance del niño creado por ng-repeat
. Dado que se crea un nuevo ámbito, si establece una variable plana en el ámbito secundario, cambiará la referencia allí, pero no en el elemento primario. Cuando usa un objeto, el padre mantiene la referencia al objeto y solo cambia la parte interna.
Este es el mismo problema que cuando escuchas "pon siempre un punto en tu ng-modelo"
Aquí encontrará información mucho más detallada: https://github.com/angular/angular.js/wiki/ Understanding - Scopes
Estoy teniendo problemas con el uso de $scope.$watch
en algunas variables angulares que tengo en el alcance de mi proyecto. Hice una muestra jsfiddle para ilustrar el problema.
Básicamente, puedo $scope.$watch
cualquier modelo dentro del ng-switch
siempre que sea un objeto. Si es una cadena, no activará la expresión de observación, y no se cambiará fuera del alcance del área ng-switch
. ¿Angular copia la secuencia original en lugar de pasarla por referencia, como el objeto?
Estoy usando una ng-repeat
sobre algunos elementos, aquí está algo de mi código:
<div ng-switch="key">
<div ng-switch-when="deal_id">
DEALID: <input type="text" ng-model="dealIdModel"/> -- {{dealIdModel}}
</div>
<div ng-switch-when="thing_id">
THING: <input type="text" ng-model="thingIdModel.test"/> -- {{thingIdModel.test}}
</div>
<div ng-switch-default>
DEFAULT: <input type="text" placeholder="email" ng-model="items.params.email"/> -- {{items.params.email}}
</div>
</div>
Y el JS:
$scope.items = {
"statusCode":"ACTIVE",
"params":{
"deal_id":"",
"thing_id":"",
"email":"Change me! I will get called"
}
};
$scope.dealIdModel = "I won''t change outside of the loop or get called.";
$scope.thingIdModel = {test:''Change me! So will I!''};
$scope.$watch(''items.params.email'', function (now, then, scope) {
console.log(''email change'', now, then);
});
$scope.$watch(''thingIdModel.test'', function(now, then, scope) {
console.log(''changed the thing'', now, then);
});
$scope.$watch(''dealIdModel'', function(now, then, scope) {
console.log(''dealID changed:'', now, then);
});