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