我正在使用AngularJS构建一个允许用户构建报告然后提交它们的应用程序。标题和创建时间会自动生成(基于用户输入),并且报告摘要会添加到用户所做的所有报告的列表中。
该表最终将由服务器端 JSON 字符串填充(并且新条目将从本地会话添加到服务器),但对于我的本地测试,我需要一种在本地客户端期间添加到表的方法会议。
用户将转到一个单独的页面,他们可以在其中创建报告:单击“运行报告”后,应将报告摘要添加到表格中,其中报告的名称和创建日期会自动填充用户的输入。报告创建界面位于不同的页面上,因此与报告摘要列表所在的“主”页面不同的控制器范围。
现在,这是我的问题:从不同的控制器向表(又名本地模型)提交报告摘要的最佳、最具 Angular 风格的方法是什么? $scope
我的代码看起来像这样(记住它可能很糟糕,我打算重构它!):
控制器.js:
var MainCtrl = function($scope) {
$scope.reports = [
{name:'Trx Summary', date:'Mar 20, 2013 @ 12:30PM'},
{name:'Trx Summary', date:'Mar 20, 2013 @ 12:30PM'}
];
};
_dat_partial_view.html:
<div ng-controller="MainCtrl" class="row-fluid">
<table class="table table-striped">
...
<tr ng-repeat="report in reports">
<td>
<p>{{report.name}} <span class="label label">Generating</span></p>
</td>
<td>
<dl class="no-margin">
<dt>Date Range</dt>
<dd>Mar 3, 2013 - Mar 13, 2013</dd>
<dt>Generated</dt>
<dd>{{report.date}}</dd>
</dl>
</td>
...
</tr>
这成功地创建了一些用两个条目填充表的虚拟内容。
我需要做什么来创建这样一个动态列表加法器?我很确定我需要将push
元素放入数组中,但我不知道如何在当前控制器之外这样做$scope
。我尝试将数组的代码放在控制器之外$scope
:
控制器.js:
reports = [
{name:'Trx Summary', date:'Mar 20, 2013 @ 12:30PM'},
{name:'Trx Summary', date:'Mar 20, 2013 @ 12:30PM'}
];
var MainCtrl = function($scope) {};
这只是从表中删除了两个虚拟条目,因此不起作用。
有任何想法吗?
问题2
另一个问题:创建填充表格的动态内容列表的最佳方法是什么?该应用程序将创建报告,并将其存储在本地。然后它将尝试将新报告推送到服务器,服务器将生成报告并理论上将结果发送回连接到 JSON 字符串。换句话说,报告在成功发送到服务器并由服务器生成之前一直保持在本地。在生成报告之前,用户无法阅读该报告,但如果服务器由于某种原因无法接受生成新报告的请求,该报告也将保留在本地保存。
这就是说,我已经看到建议使用service 或 factory的示例。这是最明智的做法吗?这比我现在设置的简单数组更好吗?