angularjs更改控制器之间共享的工厂对象

时间:2015-11-11 01:08:43

标签: javascript angularjs angularjs-scope angularjs-controller angularjs-factory

更新工厂对象后,是否可以更新指向工厂对象的范围变量? 如果有2个角度控制器共享工厂对象,如果其中一个控制器更改了工厂对象,则它不会反映在另一个控制器的范围变量中。

例如:http://jsfiddle.net/zjm0mo10/ 结果将是

" Factory foo.bar是555"而不是

"工厂foo.bar是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>

1 个答案:

答案 0 :(得分:0)

将范围属性设置为testFactory.foo,例如

$scope.foo = testFactory.foo;

<p>Factory foo.bar is {{foo.bar}}</p>

这样,作用域属性将引用testFactory.foo,它保持不变(不会被覆盖)。

此外,您需要从$scope.$apply()中删除clickme()ng-click已触发摘要周期。

http://jsfiddle.net/zjm0mo10/1/