<body>
<div id="app">
<h2 v-if="isShow">{{message}}</h2>
<h2 v-else>如果信息为false,就显示我</h2>
</div>
<script src="../vue.js"></script>
<script> const app = new Vue({ el:"#app", data:{ message:"hello Vue", isShow:"ture" } }) </script>
<body>
<div id="app">
<span v-if="isUser">
<label for="username">帐号登录</label>
<input type="text" id="username" placeholder="用户帐号">
</span>
<span v-else>
<label for="email">邮箱登录</label>
<input type="text" id="email" placeholder="用户邮箱">
</span>
<button @click="isUser = !isUser">切换登录方式</button>
</div>
<script src="../vue.js"></script>
<script> const app = new Vue({ el:"#app", data:{ message:"如果信息为true,就显示我", isShow:"true", isUser:"true" } }) </script>
</body>
但是这种方法有小问题,如果在有输入内容的情况下,切换了类型,就会发现文字依然显示之前的输入的内容。
按道理来说,切换到另一input元素中,在另一个input中应该会被清空。
解答:这是因为Vue进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素,所以在上面案例,Vue内部方向原来的input元素不再使用,直接作为else中的input使用了。
解决方法:
如果不希望这种情况出现,可以给对应的input元素添加key,并且需要保证key不同
<span v-if="isUser">
<label for="username">帐号登录</label>
<input type="text" id="username" placeholder="用户帐号" key="username">
</span>
<span v-else>
<label for="email">邮箱登录</label>
<input type="text" id="email" placeholder="用户邮箱" key="email">
</span>
可以控制页面中的元素是否显示<h2 v-show="isShow">显示h2</h2>
与上述的v-if,不同的是
v-if:当条件为false时,包含v-if指令的元素,根本不会存在dom中,直接删除
v-show:当条件为false时,v-show只是给元素一个行内样式,display:none;
开发中如何选择?
当需要在显示与隐藏之间频繁切换时,选择v-show
如果只有一次切换时,通过使用v-if
在遍历对象的过程,如果只是获取一个值,那么获取的是value<ul><li v-for="value in info">{{value}}</li></ul>
如果想获取两个值<ul><li v-for="(key,value) in info">{{value}}:{{key}}</li></ul>
第一个值为value,第二值为key
官方推荐在使用v-for的时候,给对应的元素或者组件添加一个key属性
<body>
<div id="app">
<ul><li v-for="item in info">{{item}}</li></ul>
<button @click="add">添加元素</button>
</div>
<script src="../vue.js"></script>
<script> const app = new Vue({ el:"#app", data:{ message:"如果信息为true,就显示我", isShow:"true", isUser:"true", info:["a","b","c","d"] }, methods:{ add(){ //1.push() //this.info.push("aaa"); //2.通过索引值 //this.letters[0] = "aaaa"; } } }) </script>
</body>
1、push 方法是响应式的
2、通过索引值修改,不是响应式this.info[0] = "aaaa";
3、pop(将数组最后的元素删除),shift(将数组第一个的元素删除),是响应式的
4、unshift(将元素添加到数组的最前面,可添加多个值),也是响应式的
5、splice(): 注意 这种方法会改变原始数组。
删除元素:第一个参数是开始删除的位置,第二参数是删除多少个元素。如果仅删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。
插入元素:第一个参数是开始插入的位置,第二个参数是0,后面参数是插入的元素。
替换元素:第一个参数是开始添加的位置,第二个参数是要替换多少个元素,后面参数是替换的元素。
<!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">
<title>Document</title>
<script src="../vue.js"></script>
<style> table { border: 1px solid #e9e9e9; border-collapse: collapse; border-spacing: 0; } th, td { padding: 8px 16px; border: 1px solid #e9e9e9; text-align: left; } th { background-color: #f7f7f7; color: #5c6b77; font-weight: 600; } </style>
</head>
<body>
<div id="app">
<table>
<thead>
<tr>
<th></th>
<th>书籍名称</th>
<th>出版日期</th>
<th>价格</th>
<th>购买数量</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in books">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<td>{{getFinalPrice(item.price)}}</td>
<td>
<button @click="increment(index)">-</button>
{{item.count}}
<button @click="decrement(index)">+</button>
</td>
<td><button @click="removeHanle(index)">移除</button></td>
</tr>
</tbody>
</table>
<h2>总价格:{{totalprice}}</h2>
</div>
<script> const app = new Vue({ el: "#app", data: { books: [ { id: 1, name: "《算法导论》", date: "2006-9", price: 85.00, count: 1 }, { id: 2, name: "《编程艺术》", date: "2008-10", price: 59.00, count: 1, }, { id: 3, name: "《编程珠玑》", date: "2010-5", price: 128.00, count: 1, }, { id: 4, name: "《代码大全》", date: "2016-6", price: 95.00, count: 1, } ], isShow:"true" }, methods: { getFinalPrice(price) { return "¥" + price.toFixed(2) }, increment(index) { if (!this.books[index].count) { this.books[index].count = 0; } else { this.books[index].count--; } }, decrement(index) { this.books[index].count++; }, removeHanle(index){ this.books.splice(index,1); } }, computed:{ totalprice(){ let result = 0; for(let i = 0;i<this.books.length;i++){ result += (this.books[i].price)* (this.books[i].count); } return this.getFinalPrice(result); } } }) </script>
</body>
</html>
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/xiaotangyu7dong/article/details/119924659
内容来源于网络,如有侵权,请联系作者删除!