69

我有一个变量将由一个或多个控制器使用,由服务更改。在这种情况下,我构建了一个服务,将这个变量保存在内存中,并在控制器之间共享。

问题是:每次变量发生变化时,控制器中的变量都不会实时更新。

我创建了这个 Fiddle 来提供帮助。http://jsfiddle.net/ncyVK/

--- 请注意,当我增加 count 的值时, {{countService}}or永远不会更新。{{countFactory}}

如何将 Service/Factory 变量绑定到 Controller 中的 $scope.variable?我做错了什么?

4

2 回答 2

118

你不能绑定变量。但是您可以绑定包含此变量的变量访问器或对象。这是固定的jsfiddle

基本上你必须将一些东西传递给范围,它可以返回/或保存当前值。例如

工厂:

app.factory('testFactory', function(){
    var countF = 1;
    return {
        getCount : function () {

            return countF; //we need some way to access actual variable value
        },
        incrementCount:function(){
           countF++;
            return countF;
        }
    }               
});

控制器:

function FactoryCtrl($scope, testService, testFactory)
{
    $scope.countFactory = testFactory.getCount; //passing getter to the view
    $scope.clickF = function () {
        $scope.countF = testFactory.incrementCount();
    };
}

看法:

<div ng-controller="FactoryCtrl">

    <!--  this is now updated, note how count factory is called -->
    <p> This is my countFactory variable : {{countFactory()}}</p>

    <p> This is my updated after click variable : {{countF}}</p>

    <button ng-click="clickF()" >Factory ++ </button>
</div>
于 2013-04-15T21:47:43.550 回答
0

绑定服务中的任何数据都不是一个好主意,但是如果您不再需要它,我建议您使用以下两种方式。

1)获取不在您的服务内部的数据。在您的控制器内部获取数据,绑定它不会有任何问题。

2)您可以使用 AngularJs 事件功能。您甚至可以通过该事件发送数据。

如果您需要更多示例,这里的文章可能会对您有所帮助。

http://www.w3docs.com/snippets/angularjs/bind-value-between-service-and-controller-directive.html

于 2015-08-11T16:23:16.023 回答