Failure is part of learning. we should never give up the struggle in life

Vue学习笔记-双向绑定条件渲染及列表渲染

v-model
表单元素使用
如:
1.input输入框
type='radio'
type='checkbox'
type='xxxx'
2.textarea
3.select

<body>
    <div id="app">
        <p>用户的名字是{{ username }}</p>
        <hr>
        <input type="text" v-model='username'>
        <hr>
        <select v-model='food'>
            <option value="">请选择食物</option>
            <option value="1">面</option>
            <option value="2">米</option>
            <option value="3">汤</option>
            <option value="4">菜</option>
            <option value="5">肉</option>
        </select>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
</script>

    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                username: '张三',
                food: '',
            },
            method: {

            },
        })
    </script>
</body>
<!-- 数据源改动同步到页面,页面改动也会同步到数据源 -->
<!-- v-bind只能单向的将数据源同步到页面 -->
<!-- food值默认空便默认显示了'请选择食物' 更改food值改变默认显示 -->
<!-- 在页面选择其他选项时food的值也相应的在数据源改变 -->

v-model的指令修饰符
.number
.trim
.lazy

<body>
    <div id="app">
        <!-- 超过两位后会变成字符串的拼接所以需要转为number -->
        <input type="text" v-model.number='n1'>+<input 
type="text" 
v-model.number='n2'>=<span>{{ n1+n2 }}</span>
        <hr>
        <!-- 获取和失去焦点时会自动去除掉空格 但像这样 如"me is good boy " 
字符间的空格不会去除 在 me 前有若干空格都会去除-->
        <input type="text" v-model.trim='username'>
        <button @click='name'>获取用户名</button>
        <hr>
        <!-- 在"change"时更新而非"input"时更新 也就是在失去焦点时更新数据 
不同于上面是在实时的更新数据-->
        <input type="text" v-model.lazy='username'>
        <button @click='name'>获取用户名</button>

    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
</script>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                n1: '',
                n2: '',
                username: '',
            },
            methods: {
                name() {
                    console.log(`"${this.username}"`)
                }
            }

        })
    </script>
</body>

条件渲染指令
辅助开发者按需控制DOM的显示与隐藏
v-if
v-else
v-show

<body>
    <div id="app">
        <!-- 每次动态的创建或移除元素实现元素的显示和隐藏
        如果刚进页面的时候某些元素默认不需要展示,而且后期
    也不可能不需要被展示,此时v-if性能更好 -->
        <!-- 靠 不需要不写不行吗我淦 你电脑应该也不缺这点
        性能吧 x.x -->
        <p v-if='flag'>这是v-if控制的元素</p>
        <!-- 动态的为元素添加或移除display:none的样式来实现
        元素的显示与隐藏 如果需要频繁的切换元素的显示状态
        用 v-show -->
        <!-- 在实际开发中一般都是用v-if -->
        <p v-show='flag'>这是v-show控制的元素</p>
        <hr>
        <!-- v-if可以单独使用 但v-else 只能配套v-if使用
        否则不会识别 类似于JS中的 else if 如下 成绩为A则显示优秀其它不会显示 
不为A则逐个判断 都不符合会显示else所对应的-->
        <div v-if='type === "A"'>优秀</div>
        <div v-else-if='type === "B"'>良好</div>
        <div v-else-if='type === "C"'>一般</div>
        <div v-else='type === "D"'>差</div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
</script>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                flag: true,
                type: "B",
            },
            methods: {

            },
        })
    </script>
</body>

列表渲染指令
v-for

<body>
    <div id="app">
        <table class="table table-bordered table-hover table-striped">
            <thead>
                <th>索引</th>
                <th>Id</th>
                <th>书名</th>
            </thead>
            <tbody>
                <!-- v-for
               用来辅助开发者基于一个数组来循环渲染一个列表结构 
               用item in items形式的特殊语法 
                items是待循环的数组 item是循环的每一项-->
                <!-- 如下 
                index是索引 若不需要索引只有item就不用写小括号 
                item和index不是固定名称可以按需求修改 -->
                <tr v-for="(item,index) in list" :title="item.name">
                    <td>{{ index }}</td>
                    <td>{{ item.id }}</td>
                    <td>{{ item.name }}</td>
                </tr>
            </tbody>
        </table>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
</script>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                list: [
                    { id: 1, name: '1984' },
                    { id: 2, name: '罪与罚' },
                    { id: 3, name: '局外人' }
                ]
            },
        })
    </script>
</body>

为了防止列表状态紊乱 官方推荐用到v-for一定要绑定一个:key属性 并将id作为key的值 key值得类型只能是字符串或数字类型 key值不可重复 否则会终端报错:Duplicat keys detected
index值不具有唯一性所以不当key的值

发表评论

电子邮件地址不会被公开。 必填项已用*标注