• vuejs 三级联动


    最近在学习vuejs,写了一个城市三级联动效果,可以用在项目中的收获地址管理,支持新增与修改操作

    HTML

    <script src="https://npmcdn.com/vue/dist/vue.js"></script>
    <div id="demo">
    	<address 
    	:province="province" 
    	:city="city" 
    	:county="county" 
    	></address>
    </div>
    <script type="x/template" id="address-template">
    	<div>
    		<select v-model='province'>
    			<option value="">请选择</option>
    			<option v-for="item in provinces" value="{{item}}">{{item}}</option>
    		</select>
    		<select v-model='city'>
    			<option value="">请选择</option>
    			<option v-for="item in citys" value="{{item}}">{{item}}</option>
    		</select>
    		<select v-model='county'>
    			<option value="">请选择</option>
    			<option v-for="item in countys" value="{{item}}">{{item}}</option>
    		</select>
    	</div>
    </script>
    

    JavaScript

    
    var addressExtend=Vue.extend({
    	template:"#address-template",
    	props:{
    		province:{
    			type:String,
    			default:''
    		},
    		city:{
    			type:String,
    			default:''
    		},
    		county:{
    			type:String,
    			default:''
    		}
    	},
    	data:function(){
    		return {
    			addressData:null
    		}
    	},
    	init:function(){
    		var that=this
    		setTimeout(function(){
    			that.addressData={
    				'湖南':{
    					'长沙':{
    						"开福区":{},
    						"岳麓区":{}
    					},
    					'怀化':{
    						'沅陵':{},
    						'溆浦':{}
    					}
    				},
    				'广东':{
    					'广州':{
    						'天河区':{},
    						'越秀区':{}
    					},
    					'深圳':{
    						'宝安':{},
    						'南山':{}
    					}
    				}
    			}
    		},1000)
    	},
    	watch:{
    		province:function(val,oldval){
    			if(val!==oldval){
    				this.city=''
    			}
    		},
    		city:function(val,oldval){
    			if(val!==oldval){
    				this.county=''
    			}
    		}
    	},
    	computed:{
    		provinces:function(){
    			if(!this.addressData)return
    
    			var c=[]
    			for(var key in this.addressData){
    				c.push(key)
    			}
    
    			return c
    		},
    		citys:function(){
    			if(!this.addressData 
    				|| !this.province)
    				return 
    
    			var c=[]
    			for(var key in this.addressData[this.province]){
    				c.push(key)
    			}
    
    			return c
    		},
    		countys:function(){
    			if(!this.addressData
    				||!this.city)
    				return
    
    			var c=[]
    			for(var key in this.addressData[this.province][this.city]){
    				c.push(key)
    			}
    
    			return c
    		}
    	}
    })
    
    Vue.component('address',addressExtend)
    
    var demo1=new Vue({
    	el:'#demo',
    	data:{
    		province:'广东',
    		city:'广州',
    		county:'天河区'
    	}
    })
    

    去jsfiddle手动试试
    此文同步发表于Segmentfault

  • 相关阅读:
    查看表中bytea类型的字段内容
    Js中生成32位随机id
    VS Code操作指南
    记录一次非常简单的Win10安装
    Typora中下载并安装主题
    Win 10下隐藏任务栏图标B & O Play Audio Control
    IDEA基本使用
    Eclipse中安装反编译器(中文版)
    Eclipse设置控制台不自动弹出
    解决Eclipse控制台中文乱码的情况
  • 原文地址:https://www.cnblogs.com/jiangbingyang/p/5684113.html
Copyright © 2020-2023  润新知