angularjs 更改控制器之间共享的工厂对象
angularjs changing factory object shared between controllers
是否可以在更新工厂对象后更新指向工厂对象的作用域变量?
如果有 2 angular 个控制器共享一个工厂对象,如果其中一个控制器更改了工厂对象,则不会反映在另一个控制器的范围变量中。
例如:http://jsfiddle.net/zjm0mo10/
结果将是
"Factory foo.bar is 555" 而不是
"Factory foo.bar is 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>
将范围属性设置为 testFactory.foo
,例如
$scope.foo = testFactory.foo;
和
<p>Factory foo.bar is {{foo.bar}}</p>
这样,作用域 属性 将引用 testFactory.foo
,它保持不变(未被覆盖)。
此外,您需要从 clickme()
中删除 $scope.$apply()
。 ng-click
已经触发摘要循环。
是否可以在更新工厂对象后更新指向工厂对象的作用域变量? 如果有 2 angular 个控制器共享一个工厂对象,如果其中一个控制器更改了工厂对象,则不会反映在另一个控制器的范围变量中。
例如:http://jsfiddle.net/zjm0mo10/ 结果将是
"Factory foo.bar is 555" 而不是
"Factory foo.bar is 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>
将范围属性设置为 testFactory.foo
,例如
$scope.foo = testFactory.foo;
和
<p>Factory foo.bar is {{foo.bar}}</p>
这样,作用域 属性 将引用 testFactory.foo
,它保持不变(未被覆盖)。
此外,您需要从 clickme()
中删除 $scope.$apply()
。 ng-click
已经触发摘要循环。