Ionic3學習筆記(十一)實現省市區三級聯動

本文爲原創文章,轉載請標明出處

目錄

  1. 安裝 ion-multi-picker
  2. 導入 app.module.ts
  3. 創建 provider
  4. 創建 page
  5. 一個坑
  6. 更多
  7. 效果圖

1. 安裝 ion-multi-picker

終端運行:

npm install ion-multi-picker@2.1.0 --save

2. 導入 app.module.ts

...
import {MultiPickerModule} from 'ion-multi-picker';
...

@NgModule({
  ...
  imports: [
    ...
    MultiPickerModule,
    ...
  ]
  ...
})
...

3. 創建 provider

終端運行:

ionic g provider city-data

省市區json文件下載地址:
https://raw.githubusercontent.com/raychenfj/ion-multi-picker/master/example/src/assets/chinese-cities.json

將json值賦給下面的 cities 變量即可。

city-data.ts:

import {Injectable} from '@angular/core';


@Injectable()
export class CityDataProvider {

  cities: any[];

  constructor() {
    this.cities = 上面的json(太長我就不復制粘貼了)
  }

}

4. 創建 page

終端運行:

ionic g page edit

edit.html

<ion-header>

  <ion-navbar>
    <ion-title>編輯</ion-title>

    <ion-buttons end>
      <button ion-button>保存</button>
    </ion-buttons>
  </ion-navbar>

</ion-header>


<ion-content>
  <ion-list>
    <ion-item>
      <ion-icon name="pin" item-start></ion-icon>
      <ion-label>居住地</ion-label>
      <ion-multi-picker item-content [multiPickerColumns]="cityColumns" [cancelText]="'取消'" [doneText]="'完成'"></ion-multi-picker>
    </ion-item>
  </ion-list>
</ion-content>

edit.ts

import {Component} from '@angular/core';
import {IonicPage, NavController, NavParams} from 'ionic-angular';

import {CityDataProvider} from "../../providers/city-data/city-data";


@IonicPage()
@Component({
  selector: 'page-edit',
  templateUrl: 'edit.html',
})
export class EditPage {

  cityColumns: any[];

  constructor(public navCtrl: NavController, public navParams: NavParams, public cityDataProvider: CityDataProvider) {
    this.cityColumns = this.cityDataProvider.cities;
  }

}

5. 一個坑

錯誤如下:

Uncaught (in promise): Error: Template parse errors:
Can't bind to 'multiPickerColumns' since it isn't a known property of 'ion-multi-picker'.
1. If 'ion-multi-picker' is an Angular component and it has 'multiPickerColumns' input, then verify that it is part of this module.
2. If 'ion-multi-picker' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.

爲啥就報錯了咩…明明什麼都沒有錯…

最終我在這個 Issue 中找到了解決方案。

因爲我的這個頁面是子頁面,所以也要將 MultiPickerModule 導入子module一下。如果是根頁面的話就沒有問題。

edit.module.ts:

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { EditPage } from './edit';

import {MultiPickerModule} from 'ion-multi-picker';

@NgModule({
  declarations: [
    EditPage,
  ],
  imports: [
    MultiPickerModule,
    IonicPageModule.forChild(EditPage),
  ],
})
export class EditPageModule {}

6. 更多

GitHub - ion-multi-picker

7. 效果圖

iOS:
iOS

Android:
Android

如有不當之處,請予指正,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章