2016-09-12 9 views
0

У меня есть список, в котором пользователь может вызвать popover из элемента списка. Внутри popover, когда выбрана опция, необходимо создать предупреждающее сообщение.Ionic2 Alert не показывает, включен ли popover

Проблема заключается в том, что я пытаюсь вызвать предупреждение, когда всплывающее окно открыто, оно отображается неправильно. Он, похоже, находится за списком, и список становится невосприимчивым (не может принимать клики больше) ...

Для тестирования предлагается, если я добавлю предупреждение непосредственно из щелчка на элементе, вместо опции, выбранной из popover, предупреждение появляется правильно.

На странице, где создается список и поповер:

public OnItemOptionsPress(event, item) 
    { 
     event.stopPropagation(); 

     let popoverOptions = 
     [ 
       { 
        Resource: "Remove", 
        Icon: "icon-trash",    
        Callback: (event, item) => 
        { 
          this.confirmRemoveItem(event, item) 
        }, 
       } 
     ]; 

     let popover = this.PopoverController.create 
     (
       PopoverOptions, 
       { 
        Owner: item, 
        Items: this.popoverOptions 
       } 
     ); 

     popover.present({ ev:event }); 
    } 

    public confirmRemoveItem(event, item) 
    { 
     let alert = this.AlertController.create 
     (
       { 
        title: 'Remove Item', 
        message: 'Do you want to remove?', 
        buttons: 
        [ 
          { 
           text: 'No', 
           role: 'cancel', 
           handler:() => 
           { 
             console.log('No has been clicked'); 
           } 
          }, 
          { 
           text: 'Yes', 
           handler:() => 
           { 
             console.log('yes has been clicked'); 

             this.removeItem(item); 
           } 
          } 
        ] 
       } 
     ); 

     alert.present(); 
    } 

    public removeItem(item) 
    { 
     this.items.splice(item.Index, 1); 
    } 

Внутри пирог, когда выбран вариант и близкой функции называется:

public close(event, item) 
    { 
     if (item.Callback) item.Callback(event, this.Owner); 

     this.ViewController.dismiss(); 
    } 
+0

Не могли бы вы создать демоверсию [plunker] (https://plnkr.co/edit/vEjjdH) с кодом? – sebaferreras

ответ

1

Я заметил, что уволить () метод возвращает обещание. Мне пришлось добавить задержку при отклонении popover и вызове асинхронного вызова.

public close(event, item:PopoverItemModel) 
    {  
     let animation = this.ViewController.dismiss(); 

     animation.then(()=> 
     { 
       if (item.Callback) item.Callback(this.Owner); 
     }); 

     //if (item.Callback) item.Callback(this.Owner); 
    } 

Сейчас он работает ... но есть странная задержка (время, которое требуется, чтобы поповер завершить свою анимацию и быть уволен). Вероятно, диспетчер представлений не может одновременно обрабатывать несколько анимаций/переходов компонентов ...