Vue基础之省城联动

需求

页面中有一个省份下拉选项,当选择每个省份之后渲染出每个省份的城市(省份3个自定义,每个省中的城市3个自定义)
需求:使用组件完成(全局注册或局部注册)省份下拉选择充当父组件渲染出来的城市充当子组件

结构

完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 
    页面中有一个省份下拉选项,当选择每个省份之后
    渲染出每个省份的城市(省份3个自定义,每个省中的城市3个自定义)
        需求:使用组件完成(全局注册或局部注册)
        父组件省份下拉选择充当父组件渲染出来的城市充当子组件
    
    
    
    -->
    <title>省份</title>

    
    <!-- 引入 Vue.js 库 -->
    <script src="js/vue.min.js"></script>
</head>
<body>
    <div id="app">
        <!-- 父组件:省份选择器,当选择省份时触发 province-selected 事件 -->
        <province-selector @province-selected="handleProvinceSelected"></province-selector>
        <!-- 子组件:城市渲染器,接收 province 作为 prop,并根据省份显示相应城市 -->
        <city-renderer :province="selectedProvince"></city-renderer>
    </div>

    <script>
        // 定义省份选择器组件
        Vue.component('province-selector', {
            template: `
                <select @change="onProvinceChange">
                    <option value="">请选择省份</option>
                    <!-- 使用 v-for 循环生成省份选项,:key 和 :value 分别绑定循环索引和省份名称 -->
                    <option v-for="(province, index) in provinces" :key="index" :value="province">{{ province }}</option>
                </select>
            `,
            data() {
                return {
                    // 定义省份列表
                    provinces: ['广东省', '广西省', '四川省']
                };
            },
            methods: {
                // 当省份选择改变时触发此方法,通过 $emit 触发 province-selected 事件并将选中的省份作为参数传递
                onProvinceChange(event) {
                    this.$emit('province-selected', event.target.value);
                }
            }
        });

        // 定义城市渲染器组件
        Vue.component('city-renderer', {
            props: ['province'], // 接收父组件传递的 province 属性
            template: `
                <!-- 只有当 province 存在时才显示内容 -->
                <div v-if="province">
                    <h2>{{ province }} 的城市</h2>
                    <ul>
                        <!-- 根据 cities 计算属性循环生成城市列表项 -->
                        <li v-for="(city, index) in cities" :key="index">{{ city }}</li>
                    </ul>
                </div>
            `,
            data() {
                return {
                    // 定义省份对应的城市列表
                    citiesByProvince: {
                        '广东省': ['广州市', '深圳市', '佛山市'],
                        '广西省': ['南宁市', '桂林市', '柳州市'],
                        '四川省': ['成都市', '绵阳市', '宜宾市']
                    }
                };
            },
            computed: {
                // 计算属性 cities 根据 province 返回对应的城市列表,若 province 不存在则返回空数组
                cities() {
                    return this.citiesByProvince[this.province] || [];
                }
            }
        });

        // 创建 Vue 实例,挂载到 #app 元素上
        new Vue({
            el: '#app',
            data: {
                // 定义当前选中的省份,初始值为空字符串
                selectedProvince: ''
            },
            methods: {
                // 处理省份选择事件,更新 selectedProvince 的值
                handleProvinceSelected(province) {
                    this.selectedProvince = province;
                }
            }
        });
    </script>
</body>
</html>

呈上拙作,望不吝赐教 --LM
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
隐藏
变装