使用ng-repeat初始化按钮消息

时间:2014-02-11 20:54:33

标签: angularjs

我有一个循环执行一系列任务的ng-repeat。每个任务都有一个按钮,可以单击并查看分配日期和用户的选项。我想设置按钮的消息,以显示每个任务分配的用户/日期(如果有的话)(如在Basecamp上)。因此,如果没有分配任何内容,则消息将是“未分配:没有截止日期”,如果两者都被分配,则会说“史蒂夫鲍尔默:2015年12月12日”。我尝试使用以下命令初始化消息:

ng-init="setOptionsMessage(task)

问题是它在每个循环中传递相同的任务ID。有没有更好的方法来做这件事?

3 个答案:

答案 0 :(得分:1)

你能分享一些代码吗?我不明白你的问题,但也许这可能会有所帮助: http://plnkr.co/edit/oKxIk8Dg8nyCy3PxmS82?p=preview

也许它应该只是评论,但我没有足够的声誉来发表评论:)

答案 1 :(得分:1)

显示ng-repeat行以帮助说明您正在做什么。但是,我认为你需要调用一个函数并将信息作为按钮的数据返回。

<div ng-controller="Ctrl">
    <div ng-repeat='button in buttons'>
        <button ng-click="DoSomething(button.Action)">>{{button.Title}}</button>
    </div>
</div>

这假设控制器已根据检索的数据填充标题。您也可以动态地执行此操作,但这是一个简单的示例,可帮助您入门。

答案 2 :(得分:1)

感谢您的帮助。我做了上面提到的事情。我在每个li上运行一个init函数,每个函数都属于一个任务。这是init函数:

  $scope.setOptionsMessage = function(task) {
    if(task.asigneeId) {
      task.optionsMessage = $scope.fullName(task.user);
      task.optionsMessage += ' | ';
    }
    else {
      task.optionsMessage = 'Not assigned | ';
    }

    if(task.dueDate) {
      task.optionsMessage += 'Due on: ' + task.dueDate;
    } 
    else if(task.dueEvent === $scope.NEXT_APPOINTMENT) {
      task.optionsMessage += 'Due at next appointment';
    }
    else {
      task.optionsMessage += 'No due date';
    }
  }

这会为每个任务对象添加一个optionsMessage属性,以便它可以用作每个任务的消息。这是与该部分代码相关的html(slim):

li [ng-repeat='task in uncompletedTasks' ng-init="setOptionsMessage(task)" class='patient-task repeated-item']
  span ng-hide="editing"
    input type="checkbox" ng-click="markComplete(task)"
    span class="task-text" {{task.text}}

    span class="task-popover-link" 
      span class="click-link" ng-click="optionsShow=!optionsShow"
        | {{task.optionsMessage}}