离子选择器动态阵列

Ion-picker dynamic array

我想在我的应用程序上获得一个带有动态选项的离子选择器,现在是静态的,但是,我不知道该怎么做,它只是一个年份选择器,所以我需要一个数组,它有一个名称和每个位置的值。我让我的代码如下:

...
import { PickerOptions } from '@ionic/core';
import { PickerController } from '@ionic/angular';

@Component({
  selector: 'app-order-filter',
  templateUrl: './order-filter.page.html',
  styleUrls: ['./order-filter.page.scss'],
})

export class OrderFilterPage implements OnInit {
  framework = '';

  constructor(private pickerCtrl: PickerController) {}

  ...
  async showBasicPicker(){
    let opts: PickerOptions = {
      buttons: [
        {
          text: 'Cancel',
          role: 'cancel'
        },
        {
          text: 'Done'
        }
      ],
      columns: [
        {
          name: 'Year',
          options: [
            { text: '2017', value: '2017'},
            { text: '2018', value: '2018'},
            { text: '2019', value: '2019'}
          ]
        }
      ]
    };
    let picker = await this.pickerCtrl.create(opts);
    picker.present();
    picker.onDidDismiss().then(async data => {
      let col = await picker.getColumn('framework');
      console.log('col: ', col);
      this.framework = col.options[col.selectedIndex].text;
    });
  }
}

我觉得应该直截了当:

  • 在您的 class
  • 中声明一个变量 (属性)
  • 调用前赋初值或动态赋值"create"

另请参阅此 ion-picker 源代码示例(不是 Angular / Ionic,但原理相同),其中一种方法用于构造列和选项:

https://github.com/ionic-team/ionic-docs/blob/master/src/demos/api/picker/index.html

示例:

import { PickerOptions } from '@ionic/core';
import { PickerController } from '@ionic/angular';

@Component({
  selector: 'app-order-filter',
  templateUrl: './order-filter.page.html',
  styleUrls: ['./order-filter.page.scss'],
})

export class OrderFilterPage implements OnInit {

  pickerColumnOptions; // add this variable, assign initial value before creating picker

  framework = '';

  constructor(private pickerCtrl: PickerController) {

    // assign initial value here in constructor or inside ngOnInit hook:
    this.pickerColumnOptions = [
            { text: '2017', value: '2017'},
            { text: '2018', value: '2018'},
            { text: '2019', value: '2019'}
          ]

}

  ...
  async showBasicPicker(){
    let opts: PickerOptions = {
      buttons: [
        {
          text: 'Cancel',
          role: 'cancel'
        },
        {
          text: 'Done'
        }
      ],
      columns: [
        {
          name: 'Year',
          options: this.pickerColumnOptions
        }
      ]
    };
    let picker = await this.pickerCtrl.create(opts);
    picker.present();
    picker.onDidDismiss().then(async data => {
      let col = await picker.getColumn('framework');
      console.log('col: ', col);
      this.framework = col.options[col.selectedIndex].text;
    });
  }
}