Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 将变量从服务/工厂绑定到控制器_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 将变量从服务/工厂绑定到控制器

Angularjs 将变量从服务/工厂绑定到控制器,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个变量,将由一个或多个控制器使用,由服务更改。 在这种情况下,我构建了一个服务,将此变量保存在内存中,并在控制器之间共享 问题是:每次变量更改时,控制器中的变量都不会实时更新 我制作这把小提琴是为了帮忙 ---请注意,{{countService}}或{{countFactory}在我递增count值时从不更新 如何将服务/工厂变量绑定到控制器中的$scope.variable?我做错了什么?不能绑定变量。但是您可以绑定变量访问器或包含此变量的对象。这里是固定的 基本上,您必须向范围传递一

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

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

我制作这把小提琴是为了帮忙

---请注意,
{{countService}}
{{countFactory}
在我递增count值时从不更新


如何将服务/工厂变量绑定到控制器中的$scope.variable?我做错了什么?

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

基本上,您必须向范围传递一些可以返回/或保存当前值的内容。例如

工厂:

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();
    };
}
视图:


这是我的countFactory变量:{{countFactory()}}

这是我在单击变量后更新的:{{countF}

工厂++
从服务绑定任何数据都不是一个好主意,但如果您还需要它,我建议您使用以下两种方法

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

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

如果你需要更多的例子,这里的文章可能会帮助你


从本质上讲,工厂只是一个共享(单例)容器,用于存储数据和数据上的函数。您可以手动管理/同步$scope?@sambomartin权限内外的数据。这是一篇很棒的文章,通过将函数作为testFactory.getCount传递,而不是调用它,并在UI中调用它,您已经绑定了服务值。然而,如果您$scope.countFactory=testFactory.getCount(),则在初始化时只需调用函数一次,而不绑定任何内容?所以,如果值发生变化,以后不会更新吗?@sambomartin,工厂不是单例的。如果您想使用单例容器,请使用服务。服务和工厂在角度上基本相同,只是服务是单例的,工厂不是。@Aram不,工厂也是单例的;Angular中的所有服务都是单例服务。当您在模块上注册工厂函数时,它将在调用时创建一个服务实例。
<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>