Vue 简单的省市联动

<html>

<head>
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
    <div id="app">
        省份:
        <select>
<!--            1selected="selected"加上初始值-->
            <option selected="selected">
                请选择
            </option>
            <option value="广东">
                广东
            </option>
            <option value="湖南">
                湖南
            </option>
            <option value="湖北">
                湖北
            </option>
            <option value="北京">
                北京
            </option>
        </select>
        城市:
        <select>
            <option selected="selected">
                请选择
            </option>
            <option value="长沙">
                长沙
            </option>
            <option value="株洲">
                株洲
            </option>
            <option value="湘潭">
                湘潭
            </option>
        </select>
    </div>
    <script>
        var vm = new Vue({
          el: '#app',
          data: {
            city: '请选择',
            province: '请选择',
            provinces: ['广东', '湖南', '湖北', '北京'],
            cityList: [],
            area: [{
              name: '广东',
              id: 1,
              child: ['广州', '深圳', '东莞']
            },
            {
              name: '湖南',
              id: 2,
              child: ['长沙', '株洲', '湘潭']
            },
            {
              name: '湖北',
              id: 3,
              child: ['武汉']
            },
            {
              name: '北京',
              id: 4,
              child: ['北京']
            }]
          },
          watch: {
            province: function(nval, oval) {
              var self = this;
              var cityList = [];
              if (nval == '请选择') {
                this.citylist = [];
              }
              if (nval != oval) {
                for (var i = 0; i < self.area.length; i++) {
                  if (self.area[i].name == nval) {
                    cityList = self.area[i].child;
                  }
                }
                this.city = "请选择";
                this.cityList = cityList;
              }
            }
          }
        })
    </script>
</body>

</html>

 js

(1)在这段代码中,`self.area[i].child`和`area[i].child`的区别在于它们所指向的对象。

- `self.area[i].child`表示`self`对象的`area`属性的第`i`个元素的`child`属性。`self`是指向当前函数的上下文对象,可能是一个Vue实例或其他对象。这个属性应该是之前定义的一个数组或对象。
- `area[i].child`表示`area`数组的第`i`个元素的`child`属性。`area`是一个在当前作用域内定义的变量,可能是一个数组或对象。

如果不加`self.`,代码将尝试在当前作用域内查找`area`变量。如果没有找到`area`变量,则会抛出一个错误,导致代码无法正常执行。

(2)因此,`self.area[i].child`表示从`self`对象的`area`属性中获取第`i`个元素的`child`属性。而`area[i].child`表示从当前作用域内的`area`变量中获取第`i`个元素的`child`属性。

area[i].child表示全局作用域下的变量area数组中的child属性。在该代码中,由于area是定义在Vue实例之外的全局变量,因此在watch属性中无法直接访问到。

不加self,即直接使用area[i].child会导致找不到area变量的报错,因为area只在Vue实例中可见。因此,在代码中使用self.area[i].child来获得area数组的child属性,确保可以正确访问到该值。

this的引用

(3)在给定的代码片段中,self.area[i].childarea[i].child指的是同一个属性,但是它们的使用上有一些区别。

self.area[i].child中的self是一个变量,它在代码的开头通过var self = this;进行了定义。这里的self是为了在内部函数中访问外部函数的this上下文而创建的一个引用。通过将this赋值给self,可以在内部函数中使用self来访问Vue实例的属性和方法。

area[i].child则是直接访问当前作用域下的area数组的i索引对应的元素的child属性。

在给定的代码中,self.area[i].childarea[i].child的作用是相同的,都是获取area数组中特定索引位置的元素的child属性。

如果不加self,直接使用area[i].child,则在内部函数中无法访问到area数组,因为作用域的限制。因此,为了在内部函数中能够访问到area数组,需要使用self来引用外部的this上下文。

总结起来,self.area[i].childarea[i].child的作用是相同的,都是获取area数组中特定索引位置的元素的child属性。使用self.area[i].child可以在内部函数中访问到Vue实例的属性。

这段代码是一个Vue的watch属性,用于监听province属性的变化。当province属性发生变化时,会执行该函数。

在函数内部,首先创建了一个self变量,用于保存Vue实例的this指向。然后创建了一个空数组cityList,用于保存城市列表。

接下来,代码判断如果新的province值是"请选择",则将citylist属性设置为空数组。这可能是为了在用户选择"请选择"时清空城市列表

然后,代码判断如果新的province值不等于旧的province值,则执行一个for循环遍历self.area数组。在遍历过程中,如果找到一个名称与新的province值相等的对象,则将该对象的child属性赋值给cityList数组。

最后,将city属性设置为"请选择",将cityList属性设置为cityList数组。

总结起来,这段代码的作用是根据province属性的变化,更新city和cityList属性的值。其中,根据province值在self.area数组中查找对应的城市列表,将该列表赋值给cityList属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Vue省市区联动布局,可以按照以下步骤进行: 1. 创建Vue组件:首先,创建一个Vue组件来实现省市区联动布局。可以使用Vue-cli工具创建一个新的项目,然后在其中创建一个组件。 2. 数据准备:准备省市区的数据。可以使用JSON格式的数据,或者从后端接口获取数据。将数据存储在Vue组件的data属性中。 3. 布局设计:设计联动布局的样式,可以使用HTML和CSS来创建选择器和下拉框。 4. 绑定数据:将省市区的数据与下拉框进行绑定。使用v-model指令将选中的值绑定到Vue组件的data属性中。 5. 监听事件:监听省、市、区下拉框的变化事件。当省下拉框的值发生变化时,根据选中的省份,动态更新市下拉框的选项;当市下拉框的值发生变化时,动态更新区下拉框的选项。 6. 数据联动:根据用户选择的省、市、区,联动更新数据。可以使用计算属性或者观察者来实现数据的联动更新。 以下是一个简单的示例代码: ```html <template> <div> <select v-model="selectedProvince" @change="updateCities"> <option v-for="province in provinces" :key="province.id" :value="province.id">{{ province.name }}</option> </select> <select v-model="selectedCity" @change="updateDistricts"> <option v-for="city in cities" :key="city.id" :value="city.id">{{ city.name }}</option> </select> <select v-model="selectedDistrict"> <option v-for="district in districts" :key="district.id" :value="district.id">{{ district.name }}</option> </select> </div> </template> <script> export default { data() { return { provinces: [], // 省份数据 cities: [], // 城市数据 districts: [], // 区域数据 selectedProvince: '', // 选中的省份 selectedCity: '', // 选中的城市 selectedDistrict: '', // 选中的区域 }; }, mounted() { // 初始化数据,从后端接口获取省份数据 this.getProvinces(); }, methods: { getProvinces() { // 从后端接口获取省份数据,更新this.provinces }, getCities(provinceId) { // 根据省份ID从后端接口获取城市数据,更新this.cities }, getDistricts(cityId) { // 根据城市ID从后端接口获取区域数据,更新this.districts }, updateCities() { this.getCities(this.selectedProvince); this.selectedCity = ''; this.selectedDistrict = ''; }, updateDistricts() { this.getDistricts(this.selectedCity); this.selectedDistrict = ''; }, }, computed: { // 根据选中的省份和城市,过滤区域数据 filteredDistricts() { return this.districts.filter(district => district.cityId === this.selectedCity); }, }, }; </script> ``` 这是一个简单的示例代码,你可以根据你的实际需求进行修改和扩展。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值