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

Javascript Angularjs-Getter和Setter以及数据绑定多个控制器,javascript,angularjs,Javascript,Angularjs,我似乎无法掌握这种通过服务对控制器进行数据绑定的方法。在阅读本网站的帖子时,人们似乎建议远离$watch,因为这会增加开销。因此,我看到很多人使用承诺,但似乎无法让最初的数据发挥作用 我的单页应用程序在两个独立的控制器上有两个表,第三个控制器有一个表单来编辑数据。我有一个简单的提交按钮,可以设置新数据,然后在所有控制器之间重新同步。到目前为止,我得到的是: 第一控制器 GDI_App.controller('first_Controller', function ($scope, Service

我似乎无法掌握这种通过服务对控制器进行数据绑定的方法。在阅读本网站的帖子时,人们似乎建议远离$watch,因为这会增加开销。因此,我看到很多人使用承诺,但似乎无法让最初的数据发挥作用

我的单页应用程序在两个独立的控制器上有两个表,第三个控制器有一个表单来编辑数据。我有一个简单的提交按钮,可以设置新数据,然后在所有控制器之间重新同步。到目前为止,我得到的是:

第一控制器

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;
        }

    }
});

有人知道我会缺少什么吗?

对于您希望在不必从服务中显式获取数据的情况下更新的控制器,我建议使用一个单独的函数,从setter设置的服务中获取“缓存”值

现在,您已经绑定到了fetch,因此基本上是在每个摘要上(如果您使用了该调用),如果您将它直接链接到函数,它将继续重新蚀刻该承诺。因此,使用getter和别名调用控制器中的作用域模型

按照您的方式,它只在控制器负载上获得它,并且不知道何时更新/获取该模型,除非您使用手表

$scope.display = Service.get;
在视图中,只需执行

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


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

您的angularjs版本是什么?这种互动会妨碍服务器吗?因为如果没有-你根本不需要承诺,从开发者控制台中的错误消息开始。使用最新的angularjs版本1.6Thanks,但这在我的情况下不起作用。由于我的设置,我需要通过控制器/服务方法使其工作。这怎么会不工作?您在两个控制器中执行get操作,这两个控制器直接引用从fetch设置的模型?我的意思是,对于我当前的设置,此解决方案将不兼容。无论如何,谢谢。你现在的设置怎么不兼容?你知道它会出现在摘要上吗?按照您的方式,您只需要在控制器加载时获取值—在init上,强制一个手表。您可以在服务中更新值时发出并更新控制器,或者执行上述操作。否则,祝你好运。