Vue-12-条件渲染(可重复元素)

简介: Vue-12-条件渲染(可重复元素)

背景


通常在我们的登录页面会有多种登录类型,我们可以通过条件渲染来切换不同的登录表单。


实践


代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <template v-if="loginType=='username'">
        <label for="#user">username: </label> <input type="text" id="user">
        </template>
        <template v-else="loginType=='email'">
            <label for="#email">email: </label> <input type="email" id="email">
            </template>
        <br><br>
        <button @click='change'>点我切换登录方式</button>
    </div>
    <script>
        app = new Vue({
            el: "#app",
            data: {
                loginType: "username"
            },
            methods: {
                change: function(){
                    if(this.loginType=="username"){
                        this.loginType="email";
                    }else{
                        this.loginType="username";
                    }
                }
            }
        })
    </script>
</body>
</html>
复制代码


页面效果


初始:


网络异常,图片无法展示
|


点击切换登录方式:


网络异常,图片无法展示
|


存在问题


当我们在 username 登录页面输入了信息后,再切换到 email,你会发现输入框中的内容还在,这是因为两种登录类型使用的输入框是同一个元素。Vue 为我们提供了解决方案,即给输入框加上 key 属性即可。


切换前:


网络异常,图片无法展示
|


切换后:


网络异常,图片无法展示
|


优化后的代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <template v-if="loginType=='username'">
        <label for="#user">username: </label> <input type="text" id="user" key="username-input">
        </template>
        <template v-else="loginType=='email'">
            <label for="#email">email: </label> <input type="email" id="email" key="email-input">
            </template>
        <br><br>
        <button @click='change'>点我切换登录方式</button>
    </div>
    <script>
        app = new Vue({
            el: "#app",
            data: {
                loginType: "username"
            },
            methods: {
                change: function(){
                    if(this.loginType=="username"){
                        this.loginType="email";
                    }else{
                        this.loginType="username";
                    }
                }
            }
        })
    </script>
</body>
</html>
复制代码


页面效果


切换前:


网络异常,图片无法展示
|


切换后:


网络异常,图片无法展示
|


你会发现,加了 key 之后,在切换登录类型后,输入框中的内容已经被清理掉了。

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

相关文章
|
3月前
|
JavaScript
vue异步渲染
vue异步渲染
|
1月前
|
监控 JavaScript 前端开发
Vue 异步渲染
【10月更文挑战第23天】Vue 异步渲染是提高应用性能和用户体验的重要手段。通过理解异步渲染的原理和优化策略,我们可以更好地利用 Vue 的优势,开发出高效、流畅的前端应用。同时,在实际开发中,要注意数据一致性、性能监控和调试等问题,确保应用的稳定性和可靠性。
|
3月前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
3月前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
3月前
|
人工智能 JavaScript 索引
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
这篇文章讨论了在Vue中进行列表渲染时遇到的“Duplicate keys detected”错误。这个错误通常发生在使用 `v-for` 指令渲染列表时,如果没有为每个循环项指定一个唯一的 `key` 属性,或者指定的 `key` 属性值重复了。文章提供了导致错误的原始代码示例,并给出了修正后的代码,通过在 `key` 绑定中加入索引确保 `key` 的唯一性。此外,文章还解释了为什么需要唯一 `key` 以及如何解决这个问题。
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
|
3月前
|
JavaScript 前端开发 UED
组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
该文章详细介绍了如何使用Vue3结合TypeScript来开发全局Header组件和列表数据渲染组件ColumnList,并提供了从设计到实现的完整步骤指导。
|
4月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
80 1
|
4月前
|
JavaScript
Vue学习之--------列表渲染、v-for中key的原理、列表过滤的实现(2022/7/13)
这篇博客文章详细介绍了Vue中列表渲染的基础知识、`v-for`指令的使用、`key`的原理和列表过滤的实现。通过代码实例和测试效果,展示了如何遍历数组和对象、使用`key`属性优化渲染性能,以及如何实现列表的动态过滤功能。
Vue学习之--------列表渲染、v-for中key的原理、列表过滤的实现(2022/7/13)
|
4月前
|
JavaScript 前端开发
Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)
这篇博客文章讲解了Vue中绑定样式和条件渲染的方法,包括类样式绑定的不同写法、`v-show`和`v-if`的条件渲染区别以及它们的使用场景和特点,并通过代码实例和测试效果来展示具体应用。
Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)
|
4月前
|
JavaScript UED
强制 Vue 重新渲染组件的5种方法,解决你开发过程中数据和视图无法同步的Bug。
强制 Vue 重新渲染组件的5种方法,解决你开发过程中数据和视图无法同步的Bug。