@click.prevent是一个事件修饰符的组合。它用于阻止默认的点击行为并执行特定的逻辑。
@click 是Vue模板语法中用于监听元素的点击事件的指令。当元素被点击时,相关的方法或表达式将会被执行。
.prevent 是一个事件修饰符,用于告诉Vue在触发点击事件后立即调用 event.preventDefault() 方法,阻止浏览器默认的行为。
举个例子,在下面的代码中,当连接被点击时,会执行 handleClick 方法,并且阻止默认的跳转行为,比如下面的demo:
<div id="app">
<a @click.prevent="alert('hello')" href="http://www.52jiagou.com">连接</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.js"></script>
<script>
const app = new Vue({
//element缩写
el: '#app',
methods:{
alert(msg){
alert(msg);
}
}
})
</script>事件修饰符和类型的判断:
<div id="app">
请输入分数:<input type="text" v-model.number="score" />
<input type="button" @click="checkScore" value="确定" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.js"></script>
<script>
const app = new Vue({
//element缩写
el: '#app',
data:{
score:null
},
methods:{
checkScore(){
if(typeof this.score != "number"){
alert("请输入数字");
}
}
}
})
</script>watch 侦听器,作用:监视数据变化,执行一些业务逻辑或异步操作。例子:
<div id="app">
请输入:<input type="text" v-model="student.remark" />
同步:<input type="text" v-model="remark2" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.js"></script>
<script>
const app = new Vue({
//element缩写
el: '#app',
data:{
remark2:"",
student:{
remark:""
}
},
watch:{
'student.remark' (newValue){
this.remark2 = newValue;
}
//假设里面需要异步处理
/* async 'student.remark' (newValue){
const res = await axios({
url:'',
params:{}
})
console.log(res.data);
} */
//实现防抖,延迟执行
/* clearTimeout(this.timer);
this.timer = setTimeout(async () => {
async 'student.remark' (newValue){
const res = await axios({
url:'',
params:{}
})
console.log(res.data);
}
}, 1000); */
}
})
</script>watch完整写法:
watch:{
数据属性名:{ //如果是想监控整个对象,写对象名
deep:true,//深度监视
immediate:true,//是否初始化的时候就马上执行一次
handler(newValue){}
}
}every 是数组的一个内置方法,用于检查数组中的所有元素是否符合指定的条件。它会对数组中的每个元素依次执行指定的函数,只有当所有元素都满足条件时,才会返回 true;如果任何一个元素不满足条件,则返回 false。
在创建路由器实例时,history 配置允许我们在不同的历史模式中进行选择。
Hash 模式
hash 模式是用 createWebHashHistory() 创建的,它在内部传递的实际 URL 之前使用了一个哈希字符(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有不好的影响。如果你担心这个问题,可以使用 HTML5 模式。
HTML5 模式
用 createWebHistory() 创建 HTML5 模式,推荐使用这个模式,当使用这种历史模式时,URL 会看起来很 "正常",例如 https://example.com/user/id。漂亮!
不过,问题来了。由于我们的应用是一个单页的客户端应用,如果没有适当的服务器配置,用户在浏览器中直接访问 https://example.com/user/id,就会得到一个 404 错误。这就尴尬了。
不用担心:要解决这个问题,你需要做的就是在你的服务器上添加一个简单的回退路由。如果 URL 不匹配任何静态资源,它应提供与你的应用程序中的 index.html 相同的页面。漂亮依旧!
location / {
try_files $uri $uri/ /index.html;
}v-model 和 v-bind 是 Vue 中两个常用的指令:
v-model 用于表单元素,实现双向数据绑定,同时监听用户输入和更新数据。
v-bind 用于绑定数据到 DOM 元素的属性或组件的属性,实现数据驱动视图的更新。
需要注意的是,v-model 实质上是 v-bind 和 v-on 的结合使用,简化了双向数据绑定的写法。在某些情况下,你也可以使用 v-bind 和 v-on 分别完成类似的功能。
demo:
<div id="app">
<ul>
<li v-for="(item,index) in list" :key="item.id">
<input type="checkbox" v-model="item.checked" />{{item.name}}
</li>
</ul>
全选<input type="checkbox" v-model="isAll" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@latest/dist/vue.js"></script>
<script>
const app = new Vue({
//element缩写
el: '#app',
data:{
list:[
{id:1,name:"小强",checked:true},
{id:2,name:"小红",checked:false}
]
},
computed:{
isAll : {
get (){
return this.list.every(p => p.checked);
},
set (value){
console.log(value);
this.list.forEach(p => p.checked = value);
}
}
}
})
</script>