zoukankan      html  css  js  c++  java
  • Vue.js 单选绑定

    唯一有点儿现实意义的就是拿到的多选列表可能ajax从后台拿到的, 这样以后还有点儿借鉴的意思

    <template>
        <div>
            below is App3:
            <br>
            <input v-model="myValue" />
            {{myValue}}
            <input v-model="myBox" type="checkbox" value="apple">
            Apple
            <input v-model="myBox" type="checkbox" value="peach">
            Peach
            <input v-model="myBox" type="checkbox" value="motorola">
            Motorola
            <br>
            {{myBox}}
            性别:
            <input type="radio">
            ------------------------<br>
            <div v-model="mySex">
                <div v-for="sex in sexOption">
                    <input type="radio" :value="sex.v" name="sexInput" @change="sexHandler(sex.v)"/>
                    {{sex.name}}
                </div>
                你选择了{{mySex}}
            </div>
            ------------------------<br>
    
            <select v-model="mySelect" value='1'>
                <option v-for="item in selectOption" :value="item.price">
                    {{item.name}}
                </option>
    
            </select> 你选择了 {{mySelect}}
    
    
        </div>
    
    </template>
    <script>
        import CompA from './components/a'
        export default {
            components: {
                CompA: CompA
            },
            data() {
                return {
                    selectOption: [{
                            name: 'apple',
                            price: 20
                        },
                        {
                            name: 'peach',
                            price: 30
                        }
                    ],
                    sexOption: [{
                            name: '',
                            v: 1
                        },
                        {
                            name: '',
                            v: 2
                        },
                        {
                            name: '保密',
                            v: 0
                        }
                    ],
                    myValue: '',
                    myBox: [],
                    mySelect: '',
                    mySex:0
    
                }
            },
            methods: {
                triggleSome() {
                    console.info('from triggersome function');
                    this.$emit('my-event');
                },
                handleMyEvent() {
                    console.info('from handle my event');
                },
                sexHandler(inputPara){
                    this.mySex=inputPara;
                    console.info('sex handler')
                }
                
            }
    
        }
    </script>

    两段分割线中间的部分, 首先这个单选里面到底有什么内容, 是不是动态的? 还是静态的? 如果是动态的, 是不是应该用select?

    嗯, 值得留待以后观察.

    果然话音未落, 就有了一种牛逼的解耦写法

    首先 在要引入select的地方, 插入一个自定义组件

        <vSelect @onSelect="selectHandler"></vSelect>

    当然别忘了引入vue文件跟在components里面声明

    那么这个vue里面, 一方面, 把这个select放进去:

    <template>
        <div>
            <select v-model="mySelect" value='1' @change="sendEvent">
                <option v-for="item in selectOption" :value="item.price">
                    {{item.name}}
                </option>
    
            </select> 你选择了 {{mySelect}}
        </div>
    </template>

    注意@change绑定在select上

    然后再用handler, emit你的选择去父组件

    <script>
        export default {
            data() {
                return {
                    mySelect: 0,
                    selectOption: [{
                            name: 'apple',
                            price: 20
                        },
                        {
                            name: 'peach',
                            price: 30
                        }
                    ],
                };
            },
            methods: {
                sendEvent() {
                    console.info('select changed')
                    this.$emit('onSelect', this.mySelect);
                }
    
            }
        }
    </script>

    父组件再增加相应的自定义事件的处理方法即可.

    selectHandler(whatUSelect) {
                    console.info('this is select handler and you select ' + whatUSelect)
                }

    这里有个奇怪的事就是自定义的事件, 只能在自定义的组件中才能起作用, 不知道是不是this的问题, 以后会清楚的吧.

    然后发现, watch也有类似的功能, 直接将input用v-model绑定一个data里面的属性, 应该是叫attri吧, 直接watch方法盯住它, 它一改变, 就直接用对应的function干对应的事儿就行了, 这样应该是最方便的方法吧?

  • 相关阅读:
    CXF学习(2) helloworld
    foreach与Iterable学习
    java基础之JDBC八:Druid连接池的使用
    java基础之JDBC七:C3P0连接池的使用
    java基础之JDBC六:DBCP 数据库连接池简介
    java基础之JDBC五:批处理简单示例
    java基础之JDBC四:事务简单示例
    java基础之JDBC三:简单工具类的提取及应用
    java基础之JDBC二:原生代码基础应用
    java基础之JDBC一:概述及步骤详解
  • 原文地址:https://www.cnblogs.com/Montauk/p/10063399.html
Copyright © 2011-2022 走看看