目前,我正致力于构建时间表应用程序。在创建时间表页面上,用户可以针对不同任务收取工时。这些任务与项目相关联,因此工作流程为:
1)用户选择项目。
2)API触发并使用与该项目关联的任务填充我的选择列表。
3)用户选择一项任务,并为该任务收取时间。
时间表上的每一行都是通过页面按钮触发的ng-repeat生成的。
我的问题是在我的projectIDSelected函数中,我将任务推送到$ scope.tasks。如果用户尝试向其他项目收取时间,则会覆盖任务,因此时间表中的第一行将其任务更改为第二行中返回的任何内容。
我不确定如何使用ng-repeat处理添加时间表行,但是有一个独特的' $ scope中每个时间表行的存储库。
我的代码如下:
控制器功能:
this.projectIDSelected = function (data) {
console.log("project id selected function has fired.");
console.log($scope.projects);
TaskApi.GetProjectTasks(
{
params: {
projectId: data,
}
},
//handle success
function (res) {
console.log("Tasks for ProjectId retrived");
console.log(res);
var json = {};
$scope.tasks = [];
for (i = 0; i < res.data.length; i++) {
json = res.data[i];
json.text = json.taskName;
delete json.taskName;
$scope.tasks.push(json);
}
// $scope.tasks = res.data;
},
//handle failure
function (res) {
console.log(res);
}
)
}
我的观点:
<div class="wrapper wrapper-content animated fadeInRight" ng-controller="createTimesheetCtrl as createTSCtrl" >
<tr ng-repeat="taskDetail in taskDetails | filter:createTSCtrl.filterTaskDetail" class="footable-even">
<!-- editable Project (select-local) -->
<span editable-select="taskDetail.project" e-form="tableform" e-ng-model="projectID" e-ng-change ="createTSCtrl.projectIDSelected($data)" e-ng-options="pj.id as pj.text for pj in projects">
{{ createTSCtrl.showProject(taskDetail) }}
</span>
</td>