javascript - 注入(inject) Controller 的自更新服务

标签 javascript angularjs angularjs-scope

在我的应用程序中,我希望有一个 self 更新的数据服务,该服务被注入(inject)到 Controller 中:

app.factory("StatsService", function() {
    var service;
    service = {
        data: 0,
        init: function() {
            var self = this;
            setInterval(function() {
                self.data = Math.floor((Math.random() * 100) + 1);
            }, 1000);
        }
    };
    service.init();
    return service;
});

这是一个示例 Controller :

app.controller("SourcesController", ['$scope', 'StatsService', function($scope, StatsService) {
    $scope.data = StatsService.data;

    $scope.$watch('data', function(val) {
        // this does not work either
    });
}

如何让 Controller 反射(reflect)服务更改?我不知道我是否在服务或 Controller 上做错了什么,它就是不起作用。

最佳答案

由于 data 属性是原始 int,因此值会复制到 scope.data 中。现在,这是两个单独的值,一个存储在服务中,另一个存储在 Controller 中。因此,即使服务数据发生变化,也不会影响 Controller 数据属性。

为了使它们保持同步,请使用带有子属性的对象。因此,服务中的数据声明变为

data:{value:0}

无论你在哪里绑定(bind),都使用表达式 data.value

关于javascript - 注入(inject) Controller 的自更新服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356840/

相关文章:

javascript - 有没有一种方法可以同时添加 onkeypress 和 onclick 事件监听器?

javascript - 第二次点击时的 Ng-table 更改页面操作(不是第一次点击时)

javascript - 向下滚动时 Angular 隐藏标题,向上滚动时显示

c# - Asp.net 从 Ajax 调用 C# 方法

javascript - TypeScript 中的条件类型

javascript - Angular 错误 : $http. 帖子不是函数

javascript - ng-form模板中的 Angular 丢失范围

javascript - AngularJS 指令调用另一个指令未正确传递数据以使用 $compile 进行渲染

javascript - 从 8 :00 to 17:00 开始的一个月内的几天的 Highchart 热图

javascript - 从 Angular http 调用加载数据和背景图像后