javascript - otro - angularjs cambia el objeto de fábrica compartido entre los controladores
modulos angularjs (1)
¿Es posible actualizar la variable de ámbito que apunta a un objeto de fábrica, después de actualizar el objeto de fábrica? Si hay 2 controladores angulares que comparten un objeto de fábrica, si uno de los controladores cambia el objeto de fábrica, no se refleja en la variable de alcance del otro controlador.
Ej: http://jsfiddle.net/zjm0mo10/ El resultado será
"Factory foo.bar es 555" en lugar de
"Factory foo.bar es 666"var app = angular.module(''myApp'', []);
app.factory(''testFactory'', function(){
return {
foo: {bar:555},
}
});
function HelloCtrl($scope, testFactory)
{
$scope.bar = testFactory.foo.bar;
$scope.clickme = function()
{
alert("testFactory.foo.bar "+testFactory.foo.bar);
$scope.$apply();
}
}
function GoodbyeCtrl($scope, testFactory)
{
testFactory.foo.bar = 666;
}
<html>
<div ng-controller="HelloCtrl">
<p>Factory foo.bar is {{bar}}</p>
<button ng-click="clickme();">btn</button>
</div>
</html>
Establezca las propiedades del alcance en testFactory.foo
, por ejemplo
$scope.foo = testFactory.foo;
y
<p>Factory foo.bar is {{foo.bar}}</p>
De esta forma, la propiedad del ámbito hará referencia a testFactory.foo
que permanecerá intacto (no sobrescrito).
Además, debe eliminar $scope.$apply()
clickme()
de clickme()
. ng-click
ya desencadena un ciclo de resumen.