目前我正在研究涉及使用angularjs的项目。在开发模块时,我觉得需要在两个不同的控制器中重用服务提供的数据。
我有一个控制器Ctrl1
,可以点击angularjs
服务并获取数据。现在,使用View1.html
的视图Ctrl1
有一个链接,可以将用户导航到另一个视图View2.html
。 View2.html
使用控制器ctrl2
。
现在我想传递Ctrl1
中Ctrl2
提取的数据而不再次点击该服务。我使用$rootScope
完成了这项工作,但我读过它不推荐。我也看到很多文章建议使用服务,但这会打两次我不想要的数据库。
请建议。
答案 0 :(得分:0)
与Durgpal提到的一样 - 您应该将数据保存在服务中。
例如,您可以在服务中使用两个方法--fetchDataFromServer,getDataFromNgService。 以及包含所需数据的服务的变量
var dataHolder = {
desiredData: null
}
function fetchDataFromServer() {
$http.getMyData().then(function(yourData) {
dataHolder.desiredData = yourData
)}
}
function getDataFromNgService() {
return dataHolder;
}
CTRL1:
service.fetchDataFromServer(); //fetch data from the server first
this.data= service.getDataFromNgService();//set the dataHolder on your ctrl
ctrl2:
this.data = service.getDataFromNgService();//dont call the server, just set he dataHolder from the ng service on your ctrl
,在完成对服务器的调用后,数据可在html中重新生成(双向数据绑定):
{{ctrl.data.desiredData }}
希望那很有帮助。