switch ngswitch for example angularjs angularjs-scope ng-repeat ng-switch

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); });