Angular Список заполненный в конструкторе не определен в методе - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть компонент Angular 9 со службой, внедренной в конструктор и используемой внутри конструктора для заполнения списка определенной модели следующим образом:

 export class translationtasksComponent implements OnInit { 
    usertaskslist: UserTaskType[];
    constructor( public service3: UserService) {   
    service3.getTasks().subscribe(res => { this.usertaskslist = res as UserTaskType[] });
     }  
    }

внутри того же компонента, у меня есть 2 методы, в которых я пытаюсь использовать предыдущий список следующим образом:

 getFilteredUsers(options) {
        return {
          store: this.usertaskslist,
          filter: options.data ? ["taskTypeId", "=", options.data.userTaskTypeTaskTypeId] : null
        };
      }

 setUserValue(rowData: any, value: any) {
        .
        .
         console.log( this.usertaskslist)
        .
        .
      }

конструктор работает хорошо и заполняет список. также первый метод работает нормально, но во втором методе список возвращает «неопределенный». Я попытался снова вызвать службу в методе setUserValue как обходной путь, но служба также не определена и не распознается как служба.

Примечание. Я использую ядро. net с шаблоном Angular.

2 метода - это события, запускаемые dxDataGrid из DevExtreme.

1 Ответ

0 голосов
/ 24 апреля 2020

Я нашел решение, но не знаю, понимаю ли я все его аспекты. Похоже, что запущенное событие (setUserValue), которое вызывается при редактировании ячейки dxDataGrid, по какой-то причине не имеет прямого доступа к экземпляру компонента. Но оказалось, что я могу передать ему экземпляр компонента в конструкторе, а затем получить его в своем обработчике и использовать его. и это прекрасно работает следующим образом:

constructor(public service3: UserService) {
    service3.getTasks().subscribe(res => { this.usertaskslist = res as UserTaskType[] });
    .
    .
   let that = this,
   origOnSetCellValue = this.setUserValue;
   this.setUserValue = function () {
     origOnSetCellValue.apply(this, [].slice.call(arguments, 0, 3).concat([that]));
   };

  }

.
.
setUserValue(rowData: any, value: any, currentData, componentInstance) {

    var currentUserId = currentData.userTaskTypeUserId;
    var currentTaskType = currentData.userTaskTypeTaskTypeId;
    var currentUserTask = componentInstance.usertaskslist;
}
...