Javascript 绑定服务&x27;getter';或$watch手动更改和更新-AngularJS

Javascript 绑定服务&x27;getter';或$watch手动更改和更新-AngularJS,javascript,angularjs,angularjs-directive,angularjs-service,Javascript,Angularjs,Angularjs Directive,Angularjs Service,在我的AngularJS应用程序中,我使用一个服务来存储由一个简单的轮询机制更新的信息。然后,我的控制器/指令从该服务读取,这样我就可以在一个地方拥有该模型数据,避免在其他范围内重复某些信息 在开发此解决方案时,我一直想知道这是否是最好的方法 目前,每个控制器的作用域只有它们正在跟踪的对象的关键点。然后,我将服务的“getter”方法绑定到作用域,以便它们保留绑定——当服务得到更新时,对象集合将被替换,因此我无法绑定对象本身,否则我将失去绑定。指令也是如此,我将服务作为依赖项注入,并使用检索到的

在我的AngularJS应用程序中,我使用一个服务来存储由一个简单的轮询机制更新的信息。然后,我的控制器/指令从该服务读取,这样我就可以在一个地方拥有该模型数据,避免在其他范围内重复某些信息

在开发此解决方案时,我一直想知道这是否是最好的方法

目前,每个控制器的作用域只有它们正在跟踪的对象的关键点。然后,我将服务的“getter”方法绑定到作用域,以便它们保留绑定——当服务得到更新时,对象集合将被替换,因此我无法绑定对象本身,否则我将失去绑定。指令也是如此,我将服务作为依赖项注入,并使用检索到的数据显示一些信息:

// SERVICE
app.factory('updateService', function($interval) {
    var data = {
        '1': {
            'id': 1,
            'info': true,
             ...
        },
        '2': {
            'id',2,
            'info': false,
            ...
        }
    };

    return {
        getDataObj: function(id) {
            return data[id];
        },
        isObjectInfoTrue: function(id) {
            return data[id] && data[id]['info'] === true;
        },
        getObjStatus: function(id) {
            return data[id] && foo();
        }
});

// CONTROLLER
app.controller('MainCtrl', ['$scope', 'updateService', function ($scope, updateService) {
    $scope.getDataObj = updateService.getDataObj;   

    // Id's to follow
    $scope.keys = [1,3];

  }]);

// DIRECTIVE
app.directive('renderData', ['updateService', function(updateService) {
return {
    restrict: 'AE',
    replace: true,
    scope: {
        obj: '=obj'
    },
    link : function(scope,element,attrs) {
        scope.getDataObj = updateService.getDataObj;
        scope.isObjectInfoTrue = updateService.isObjectInfoTrue;
        scope.getObjStatus = updateService.getObjStatus;

    },
    template: '<div ng-if="obj && isObjectInfoTrue(obj.id)" ng-class="getObjStatus(obj.id)" class="obj" style="border:1px solid red">{{}}</div>'
  };
}]);


// HTML
<li ng-repeat="key in keys">        
    <render-data obj="getDataObj(key)"/>
</li>
//服务
应用程序工厂('updateService',函数($interval){
风险值数据={
'1': {
“id”:1,
“信息”:正确,
...
},
'2': {
“id”,2,
“信息”:错误,
...
}
};
返回{
getDataObj:函数(id){
返回数据[id];
},
IsobjectInfo真实:函数(id){
返回数据[id]&数据[id]['info']==true;
},
getObjStatus:函数(id){
返回数据[id]&&foo();
}
});
//控制器
app.controller('MainCtrl',['$scope','updateService',function($scope,updateService){
$scope.getDataObj=updateService.getDataObj;
//我要跟你走
$scope.keys=[1,3];
}]);
//指示
应用程序指令('renderData',['updateService',函数(updateService){
返回{
限制:“AE”,
替换:正确,
范围:{
obj:'=obj'
},
链接:函数(范围、元素、属性){
scope.getDataObj=updateService.getDataObj;
scope.IsobjectInfo=updateService.IsobjectInfo;
scope.getObjStatus=updateService.getObjStatus;
},
模板:“{}”
};
}]);
//HTML
  • 我喜欢这个选项,但我担心当服务对象的大小增加很多时,会有很多重复的函数调用咨询服务对象及其行为。与其他选项相比,它是可伸缩的吗?我猜这将使每个作用域分别位于控制器上,使用$watch侦听服务上的更改ice数据,然后分别更新每个控制器作用域

    提前谢谢