entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Angularjs uso correcto del ng-include

Soy novato en angularjs, me va mejor con knockoutjs AMD

knockoutjs los objetos son observables, entonces yo podría llamar a un componente dentro de otro. y si modificaba un valor se reflejaba en ambos componentes

en knockoutjs

<div data-bind="component: { name: 'home', params: { session: session }}"></div>

En Angularjs utilizo un ng-include

<ng-include src="'./views/survey/home.html'"></ng-include>

y esa vista contiene el ng-controller="SurveyCtrl", pero hasta ahora me he visto obligado a utilizar en mi vista el "parent", para acceder al valor que esta en el controlador superior.

<span>{{$parent.session.username}}</span>

bueno si en mi controller (js), declaro una variable

$scope.session = $parent.session;  // esto pierde el apuntador a la variable session en el controlador padre, creado otro objeto igual.

Quisiera que eso no ocurriera, sin perder la modularidad, alguna ayuda por favor ?

Slds,
Atte.

1 Respuesta

1voto

Serginho Puntos540

Eso es una de las peculiaridades del scope de angular. Si no tiene un '.' en el ng-model tienes un problema.

Si haces esto:
$scope.session = 3;
y haces ng-include se hace una copia del scope por tanto 3 es copiado por valor.

Si haces esto:
$scope.variables.session = 3;
Entonces el que es copiado es variables, pero como variables es un objeto se pasa por referencia, entonces puedes acceder en el hijo y se modifica en el padre.

En resumen y como recomendación: No cuelges directamente del scope tipos básicos, porque al heredarlo se copian por valor, simple utiliza tipos que generen en la variable una referencia: Arrays, objects...

0voto

wroque comentado

Sabes, este proyecto lo había comenzado hace meses atrás y ahora lo volví a retomar, pero ahora me di cuenta que trabaja con el mismo objeto.

el padre
$scope.session = 3;

el hijo.
$scope.session = $scope.$parent.session;

lo que ocurre es que lo estoy reescribiendo, pero aunque cambie el valor del padre $scope.session, el valor del hijo seguira siendo 3

por que?, bueno angular esta llamando solo 1 veces con ng include del controlador. si cambiara el objeto esto no se reflejaría en el hijo(no es observable), ahora lo pienso y fue un error de novato mio >.<

si, es una copia. es raro aun me confunde el lenguaje script >.<

0voto

Serginho comentado

Pasa por esto

var bar = { foo: 'baz' };
//undefined
var bar2 = bar;
//undefined
bar.foo2 = 3;
//3
bar2
//Object {foo: "baz", foo2: 3}

0voto

Serginho comentado

Pasa por esto

var bar = { foo: 'baz' };
//undefined
var bar2 = bar;
//undefined
bar.foo2 = 3;
//3
bar2
//Object {foo: "baz", foo2: 3}

0voto

wroque comentado

no entiendo, tu idea... me di cuenta que por cada

scope.x hace una copia, me complica un montón >.< ya que trabajo con un objeto grande.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta