全日历添加按钮到事件类型脚本角度

正在尝试使事件上的按钮正常工作。由于某些原因我无法跟踪,它在事件呈现后立即执行。

initCalendar() {
  function onInteract (id) {
    console.log(id);   // <----- Executes once everything is rendered (not good)
  }
  this.calendarOptions = {
    ...,
    ...,
    eventRender: function(event, element) {
      ...
      ...
      listedUsers.forEach(function(a) {
        const member = teamMembers.filter((o) => o.member._id === a.employeeMetadata.name)[0].member;
        event.description = '' +
          '<div class="text-center">' +
          '<button mat-button style="width: 80%;' +
          '    color: black;
' +
          '    background-color: lightskyblue;
' +
          '    font-weight: bold;" (click)="' + onInteract(member) + '">' +
          member.firstName + ' ' + member.lastName +
          '</button>' +
          '</div>';
        element.find('.fc-bg').append('<br>' + event.description)
      })
    }
  }
}

我需要仅当我单击有问题的按钮时才执行该函数

协助?

编辑

这是原始设置的外观(上面的代码):

这是我使用新设置的代码(遵循ngzone方法)

listedUsers.forEach(function(a) {
  const member = teamMembers.filter((o) => o.member._id === a.employeeMetadata.name)[0].member;
  event.description = element.find('.fc-bg button[mat-button]').click(() => onInteract(member));
  element.find('.fc-bg').append('<br>' + event.description)
})

现在这些按钮不会显示在事件上。 不过,我还没有实现ngZone(这对我来说是新的)。这和这件事有什么关系吗?我这是在正确的轨道上吗?

编辑%2

listedUsers.forEach(function(a) {
  const member = teamMembers.filter((o) => o.member._id === a.employeeMetadata.name)[0].member;
  event.description = element.find('.fc-bg')
  .append('<br><div style="text-align: center">' +
  '<button mat-button style="width: 80%;' +
  'color: black;' +
  'background-color: lightskyblue;' +
  'font-weight: bold;">' + member.firstName +  ' + ' + member.lastName +
  '</button></div>').click(() => onInteract(member));
  element.find('.fc-bg').append(event.description)
})

现在按钮不是在启动时执行,而是在单击时执行, 但这并不是真正的按钮执行,而是整个元素。 当我尝试单击该按钮时,它实际上会单击该元素本身,并与其所有按钮进行交互。表示我在最左侧的元素上有3个交互组件,在最右侧有1个交互组件。

我还是不明白:) 但是,我也不明白如何使按钮位于元素之上。我尝试position:relativez-index999999999


解决方案

现在已解决

@Estus和this帖子帮助很大,谢谢您

eventRender函数变成这样:

listedUsers.forEach(function(a) {
  const member = teamMembers.filter((o) => o.member._id === a.employeeMetadata.name)[0].member;
  element.find('.fc-bg')
  .append('<br><div style="text-align: center">' +
  '<button mat-button style="width: 80%;' +
  'color: black;' +
  'background-color: lightskyblue;' +
  'font-weight: bold;" id="' + member._id + '">' + member.firstName + ' ' + member.lastName +
  '</button></div>');
})

新增eventClick函数:

const listedUsers = assigned.filter(function(o) {
  return this.indexOf(o.employeeMetadata.name) > -1;
  }, teamMembers.map((o) => o.member._id));
  listedUsers.forEach(function(a) {
  const member = teamMembers.filter((o) => o.member._id === a.employeeMetadata.name)[0].member;
  if (jsEvent.target.id === member._id) {
    onInteract(member)
  }
})

现在一切正常

再次感谢您!

相关文章