我有一个域对象,可以在其上执行多个过程,每个过程可能(或可能不)都有预先配置的报告生成。
在查看域对象的详细信息页面时,将显示已执行过程的列表,并为其生成相应的报告。单击其超链接时,报告将在另一个浏览器选项卡中启动。
假设所有报告所需的信息已存在于当前详细信息页面的$scope.myDomainObject
中,如何在报告页面中利用此对象而无需重新再次从服务器获取相同的数据。
该报告是一个简单的Html页面,其CSS样式与A4纸张格式相匹配。我想使用指令而不是在另一个选项卡中打开新页面,但由于报表是在DB中动态配置的,因此无效。也许如果没有缓存指令模板,我会为它们使用动态templateUrl。
答案 0 :(得分:2)
如果将数据放入服务(单件),则可以将服务注入每个控制器的页面。这看起来像一个例子:
myApp.factory('Data', function(){
return { DataField: '' };
});
myApp.controller('MainCtrl', function($scope, Data) {
$scope.myDomainObject = Data;
});
myApp.controller('PrintCtrl', function($scope, Data) {
$scope.myDomainObject = Data;
});
此方法的局限性在于您需要拥有SPA(单页应用程序)。如果您在其他选项卡或窗口中打开,这听起来并不是这样。如果报告不是非常复杂,您可以考虑将它们移动到模板文件中,并将其作为当前选项卡中的视图加载,而不是作为一个全新的选项卡。
希望这有助于您走上正轨。祝你好运!
注意 - 根据问题编辑,您仍然可以使用模板文件。您只需添加一个查询字符串参数,以确保浏览器不缓存结果。有关详细信息,请参阅this question。