angular使用iosSelect插件实现城市选择
2018-01-09 17:09
766 查看
因为使用angular写一个webapp页面,里面有城市选择,为了简单一点直接使用了
起步
npm
下载文件
点击下载文件到项目目录中,在HTML文件中插入以下代码,并按需调整路径。
当我们把插件文件引入后我们便可以在我们的代码中使用这个插件了,由于官方demo给的是js版本的,所以我们在angular文件中使用时需要改造一下
在组件中使用插件时首先我们需要
这里需要注意一下
然后我们通过ElementRef和Renderer2来进行元素的操作,不了解ElementRef和Renderer2的朋友可以查看这篇博客
angular修仙之路
我们通过一个事件调用插件中的方法
关于使用npm引入iosselect的一些问题
首先使用
然后我们导入
当angular中使用
这个时候城市选择功能是可以使用的,但是没有样式,因为我们的样式还没有导入,使用
数据和插件文件http://pan.baidu.com/s/1cbIRFK
IOSSelect插件.
起步
npm
npm install iosselect
下载文件
点击下载文件到项目目录中,在HTML文件中插入以下代码,并按需调整路径。
<link rel="stylesheet" href="/static/css/iosSelect.css"> <script type="text/javascript" src="/static/js/iosSelect.js"></script>
当我们把插件文件引入后我们便可以在我们的代码中使用这个插件了,由于官方demo给的是js版本的,所以我们在angular文件中使用时需要改造一下
在组件中使用插件时首先我们需要
declare(声明)一下
declare let IosSelect: any;
这里需要注意一下
declare必须放在
@Component之前,否则会报错
然后我们通过ElementRef和Renderer2来进行元素的操作,不了解ElementRef和Renderer2的朋友可以查看这篇博客
angular修仙之路
我们通过一个事件调用插件中的方法
app.component.ts
import { Component, OnInit, ElementRef, Renderer2 } from '@angular/core'; import { CityService } from './city.service'; declare let IosSelect: any; @Component({ selector: 'app-user-add', templateUrl: './user-add.component.html', styleUrls: ['./user-add.component.scss'], }) export class UserAddComponent implements OnInit { address: any; oneId: any; twoId: any; cities: any; constructor( private elem: ElementRef, private rend: Renderer2, public cityService: CityService ) { this.address = "北京市 北京市 东城区"; } ngOnInit() { this.cityService.getCity() .then(res => { console.log(res); this.cities = res; }) } clickEvent() { let sccode = this.elem.nativeElement.q 4000 uerySelector('#show_contact') .getAttribute('data-city-code'); let scname = this.elem.nativeElement.querySelector('#show_contact') .getAttribute('data-city-name'); let oneLevelId = this.elem.nativeElement.querySelector('#show_contact') .getAttribute('data-province-code'); let twoLevelId = this.elem.nativeElement.querySelector('#show_contact') .getAttribute('data-city-code'); let threeLevelId = this.elem.nativeElement.querySelector('#show_contact') .getAttribute('data-district-code'); let el = this.elem; //这里需要将this作保留,否则this将指向这个对象的实例 let self = this; let iosSelect = new IosSelect(3, [self.cities.iosProvinces, self.cities.iosCitys, self.cities.iosCountys], { title: '地址选择', itemHeight: 35, relation: [1, 1, 0, 0], oneLevelId: oneLevelId, twoLevelId: twoLevelId, threeLevelId: threeLevelId, callback: function (selectOneObj, selectTwoObj, selectThreeObj) { self.oneId = selectOneObj.id; //这里的this指向发生了变化 el.nativeElement.querySelector('#contact_province_code') .setAttribute('data-province-name', selectOneObj.value); self.twoId = selectTwoObj.id; el.nativeElement.querySelector('#contact_city_code') .setAttribute('data-city-name', selectTwoObj.value); el.nativeElement.querySelector('#show_contact') .setAttribute('data-province-code', selectOneObj.id); el.nativeElement.querySelector('#show_contact') .setAttribute('data-city-code', selectTwoObj.id); el.nativeElement.querySelector('#show_contact') .setAttribute('data-district-code', selectThreeObj.id); self.address = selectOneObj.value + ' ' + selectTwoObj.value + ' ' + selectThreeObj.value; } }); }
app.component.html
<p id="select_contact" (click)="clickEvent()"> <label>所在区域</label> <input type="hidden" name="contact_province_code" data-id="0001" id="contact_province_code" value="{{oneId}}" data-province-name=""> <input type="hidden" name="contact_city_code" id="contact_city_code" value="{{twoId}}" data-city-name=""> <span data-city-code="110100" //绑定的默认值 data-province-code="110000" data-district-code="110101" id="show_contact">{{address}}</span> </p>
app.service.ts
import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import 'rxjs/add/operator/toPromise'; @Injectable() export class CityService { constructor(public http: Http) { } getCity() { const url = 'assets/select/cityData.json'; return this.http.get(url) .toPromise() .then(res => res.json()) .catch(this.handleError); } public handleError(error: any) { console.error('An error occurred', error); return Promise.reject(error.message || error); } }
关于使用npm引入iosselect的一些问题
首先使用
npm install --save iosselect创建文件,这里是发布时用到的包,所有不要使用
npm install --save-dev iosselect来创建
然后我们导入
import IosSelect from 'iosselect';注意这里没有使用
{IosSelect},当一个文件导出多个对象时就需要使用
{},而这里导入的是一个
default对象,具体的可以看一下
import和
export文档,其他地方不需要改动
当angular中使用
{IosSelect}引入时会报错
ERROR TypeError: __WEBPACK_IMPORTED_MODULE_2_iosselect__.IosSelect is not a constructor at UserAddComponent.webpackJsonp.../../../../../src/app/store/user-add/user-add.component.ts.UserAddComponent.clickEvent (user-add.component.ts:47)
这个时候城市选择功能是可以使用的,但是没有样式,因为我们的样式还没有导入,使用
@import "~iosselect/src/iosSelect.css";导入
css文件,到此我们使用npm变完成了
数据和插件文件http://pan.baidu.com/s/1cbIRFK
相关文章推荐
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
- 使用datepicker插件实现日期选择的基本操作 8-5
- 使用datepicker插件实现日期选择的基本操作 8-5
- IOS实现自动定位和手动选择城市功能
- 使用JQUERY的flexselect插件来实现将SELECT下拉菜单变成自动补全输入框
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
- phoneGap在iOS上的简单使用:自定义实现友盟分享插件
- Android使用NumberPicker控件实现选择城市,生日
- 使用原生Javascript实现城市选择逐级联动
- 省市区选择插件jquery.cityselect.js的使用示例
- 两行代码搞定iOS自定义HUD风格动画弹窗(支持选择记录) - SKChoosePopView的使用和实现思路
- IOS使用视图控制器和视图(四)使用UISlider 实现指定范围值的选择
- ul、li模仿ios的TableView实现城市选择
- IOS实现选择城市后跳转Tabbar效果
- iOS使用lua语言的使用步骤与实现插件的动态更新
- wheel自定义控件,实现城市三级联动,时间选择的功能简单使用
- JS简单实现城市二级联动选择插件的方法
- iOS 中使用tableView实现右滑显示选择功能
- JS简单实现城市二级联动选择插件的方法
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)