2017-05-02 29 views
2

我正在使用在线仪表板。该仪表板有一个由与某个项目相关的所有任务组成的页面。每个任务都有一些字段,例如预定给任务的小时数以及进度(从0到100%)。AngularJS - 更新字段后在ng-repeat中查找对象

The table looks as follows

它是可以改变的进展场,因为它包括了所有可能的百分比的下拉菜单中。我曾经改变进度,选择每一行,我修改并点击'更新任务'按钮,以便将它们发送给我的控制器并更新它们。这一直没有问题,直到我的同事提出一旦进度字段的值被更改后自动更新任务的想法。每改变一次数值,我就可以在每一个激活的值上放置一个ng-click

但是我的问题是,我该如何让我的控制器知道在那一刻我正在工作的行。假设我有3个不同的任务并更改了任务2的进度。我的控制器应该知道它必须将任务2的ID发送到服务器以更新其内容。

只要任务2的值更改为例如30%,updateTaskById()方法就会执行。此方法应使用新值更新数据库中的任务。我如何让我的控制器知道它需要更新什么任务。

HTML

<td md-cell class="tdWidth"> 
       <md-select ng-model="task.custom_fields['96203']" placeholder="100%"> 
        <md-option value="0" ng-click="updateTaskById()">0%</md-option> 
        <md-option value="0.1" ng-click="updateTaskById()">10%</md-option> 
        <md-option value="0.2" ng-click="updateTaskById()">20%</md-option> 
        <md-option value="0.3" ng-click="updateTaskById()">30%</md-option> 
        <md-option value="0.4" ng-click="updateTaskById()">40%</md-option> 
        <md-option value="0.5" ng-click="updateTaskById()">50%</md-option> 
        <md-option value="0.6" ng-click="updateTaskById()">60%</md-option> 
        <md-option value="0.7" ng-click="updateTaskById()">70%</md-option> 
        <md-option value="0.8" ng-click="updateTaskById()">80%</md-option> 
        <md-option value="0.9" ng-click="updateTaskById()">90%</md-option> 
        <md-option value="1" ng-click="updateTaskById()">100%</md-option> 
       </md-select> 
      </td> 

角控制器:

$scope.updateTaskById = function() { 
     // Update functionality here 
    }; 

在此先感谢,我希望我的问题是非常明显的。

编辑:在亚历山德鲁的答案中可以看到,我发送的任务值是从ng-click改变的。例如:updateTaskById(task.task_id)

+2

这是一个有点很难理解你正在努力实现无代码 – Mistalis

+0

什么@Mistalis我已经更新的问题,试图使之成为可能的未来更清晰参考 – Lesleyvdp

回答

0

您可以将该值传递给ng-click方法。例如,

<md-option value="0" ng-click="updateTaskById(0)">0%</md-option> 

JS

$scope.updateTaskById(value){ 
    console.log(value); 
} 
+1

这正是我需要的。我很感谢你! – Lesleyvdp

+0

@Lesleyvdp,我更新了答案。 –

+1

@ Alexandru-Ionat Mihai再次感谢你,你以前的回答是正确的。我试图告诉我的控制器它需要更新哪个任务。我不知道可以在ng-click内发送task.task_id。 – Lesleyvdp