Angularjs - Getter和Setter以及数据绑定多个控制器

时间:2018-05-25 11:42:37

标签: javascript angularjs

我似乎无法通过服务掌握这种数据绑定控制器的方法。在这个网站上阅读帖子,人们似乎建议远离$ watch因为开销。所以我看到很多人使用promises,但似乎无法获得最初的get数据。

My Signle页面应用程序在2个单独的控制器上有2个表,第三个控制器有一个用于编辑数据的表单。我有一个简单的提交按钮,它将设置新数据,然后在所有控制器之间重新同步。这是我到目前为止所得到的:

第一控制器

GDI_App.controller('first_Controller', function ($scope, Service) {

    Service.get_data();
    $scope.Current.incidents = Service.current_data(); //returns $$State;

});

第二个控制器

GDI_App.controller('second_Controller', function ($scope, Service) {

    Service.get_data();
    $scope.Current.incidents = Service.current_data(); //returns $$State;

});

在提交

上设置数据的第三个控制器
GDI_App.controller('third_Controller', function ($scope, Service) {

   $scope.submit = Service.set_data(data);

});

服务

GDI_App.factory('Service', function($q) {

    var Current ={}
    Current.Data = [
       { "Data1": "123123", "Data2": "15437"  },
       { "Data1": "432234", "Data2": "146"  },
       { "Data1": "45654", "Data2": "3534"  },
       { "Data1": "76587", "Data2": "78978"  },
       { "Data1": "2342", "Data2": "5345878"  },
       { "Data1": "178", "Data2": "34534"  },
       { "Data1": "173838", "Data2": "354534"  },
    ];

    return{

         get_data: function(){
            return $q.when(Fake_Data)
            .then(function(data) {
                return data;
            });
        }

        set_data: function(data){
            Current.Data = data;
        }

    }
});

有谁知道我会失踪什么?

1 个答案:

答案 0 :(得分:0)

对于您想要更新的控制器而不必明确地从服务中获取数据,我建议使用一个单独的函数来获取“缓存”。来自setter设置的服务的值。

现在你已经绑定了fetch,所以基本上在每个摘要上(如果你使用了那个调用),如果你把它直接链接到函数,它只会继续反馈这个承诺。因此,使用getter并将调用别名调用到控制器中的作用域模型。

你拥有它的方式,它只能在控制器负载上得到它,并且除非你使用手表,否则不知道何时更新/获取该模型。

$scope.display = Service.get;

在视图中,只需执行

<div ng-repeat="mystuff in display()"></div>

因此,一旦该值被其他任何服务更新,它只会在下一个摘要中更新。