美文网首页ionic3+Ionic 3
Ionic3学习笔记(十一)实现省市区三级联动

Ionic3学习笔记(十一)实现省市区三级联动

作者: Metaphors | 来源:发表于2017-11-26 21:13 被阅读101次

    本文为原创文章,转载请标明出处

    目录

    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

    如有不当之处,请予指正,谢谢~

    相关文章

      网友评论

      • Metaphors:@dml1874 我的意思是,我这个是子页面(懒加载),MultiPickerModule要import到子页面的module中才可以,添加到app/app.module.ts中是不行的。并不是说子页面要都添加到app/app.module.ts中,懒加载除外……这个大家应该都是懂的……

      本文标题:Ionic3学习笔记(十一)实现省市区三级联动

      本文链接:https://www.haomeiwen.com/subject/inelbxtx.html