Vue的使用(2)

一个简单的Vue项目的创建

  • 创建一个UserList.vue组件

在这里插入图片描述

  • 在App.vue中使用该组件
  1. 使用组件的第一步,导入组件
  2. 使用组件的第二部,申明这个组件
  3. 使用组件的第三步:引用组件

在这里插入图片描述

结果:

在这里插入图片描述

事件和插值语法

<template>
<div><!-- template只允许有一个唯一的孩子 --><h1>这是一个一级标题</h1><div>{{ username }}</div><div>性别{{ sex }} , 年龄{{ age }}</div><button @click="btnClick1">点我触发事件</button><hr><ul><li v-for="(user,index) of userList" :key="user.id">{{ index }}----{{ user.username }}</li></ul></div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{username:'ZhangSan',sex:'男',age:18,userList:[{id:1,username:'ZhangSan',password:'123'},{id:2,username:'LiSi',password:'456'},{id:3,username:'WangWu',password:'789'}]}},methods:{btnClick1(){console.log("Hello Vue");}}}
</script>

结果:

在这里插入图片描述

ref属性

<!--ref属性的作用就是找组件对象这个对象是一个js对象	
--><!-- 给h1添加一个ref="h1" -->
<h1 ref="h1">这是一个一级标题</h1>methods:{btnClick1(){var h1Element=this.$refs.h1console.log("找到的组件是"+h1Element.innerText)}
}

props

接收参数

  • App.vue
<template>
<div id="app"><!-- 使用组件的第三步:引用组件 --><user-list name="ZhangSan" :age="18" title="个人信息"></user-list> </div>
</template><script>// 使用组件的第一步,导入组件import UserList from './components/UserList.vue';export default {name: 'App',//使用组件的第二部,申明这个组件components: {UserList}}
</script>
  • UserList.vue
<template>
<div><h1>{{ title }}</h1><h1>{{ age }}</h1><h1>{{ name }}</h1></div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{}},//第一种方式:数组式接收数据//props:["name","title","age"]//第二种方式:对象式// props:{//   name:String,//   age:Number,//   title:String// }//第三种方式props:{name:{type:String,required:true},age:{type:Number,requestd:true},title:{type:String,required:true}}}
</script>

scoped

添加到style中,只有当前组件生效
<template>
<div><h1>{{ title }}</h1><h1>{{ age }}</h1><h1>{{ name }}</h1></div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{}},//第一种方式:数组式接收数据//props:["name","title","age"]//第二种方式:对象式// props:{//   name:String,//   age:Number,//   title:String// }//第三种方式props:{name:{type:String,required:true},age:{type:Number,requestd:true},title:{type:String,required:true}}}
</script>
<style scoped>div{color: aqua;}
</style>

结果:

在这里插入图片描述

localstorage和sessionstorage

<template>
<div><button @click="saveLocalStorage">向localstorage中存数据</button><br><br><button @click="deleteLocalStorage">向localstorage中删除数据</button><br><br><button @click="getLocalStorage">向localstorage中获取数据</button><br><br><hr><button @click="saveSessionStorage">向sessionstorage中存数据</button><br><br><button @click="deleteSessionStorage">向sessionstorage删除数据</button><br><br><button @click="getSessionStorage">向sessionstorage获取数据</button><br><br></div>
</template><script>export default { name: 'BrowerStorage',methods:{saveLocalStorage(){//向LocalStorage存数据localStorage.setItem("key1","val1")},deleteLocalStorage(){//LocalStorage删除数据localStorage.removeItem("key1")},getLocalStorage(){//获取LocalStorage数据var val = localStorage.getItem("key1")console.log(val)},saveSessionStorage(){//向SessionStorage存数据sessionStorage.setItem("key2","val2")},deleteSessionStorage(){//删除SessionStorage数据sessionStorage.removeItem("key2")},getSessionStorage(){//获取SessionStorage的数据var val = sessionStorage.getItem("key2")console.log(val)}}}
</script>

全局事件总线

  • 在main.js中安装全局事件总线
import Vue from 'vue'
import App from './App.vue'Vue.config.productionTip = falsenew Vue({render: h => h(App),//生命周期的第一个钩子函数beforeCreate() {Vue.prototype.$bus = this //安装全局事件总线},}).$mount('#app')
  • 在userList.vue中进行监听传过来的消息
<template>
<div>我喜欢的语言是:{{ language }}</div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{language:''}},mounted(){//监听传递过来的消息this.$bus.$on("changeName",(newtext)=>{this.language=newtext;})},beforeDestroy(){this.$bus.$off ("changeName");}}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • 在userSchool.vue中发送数据
<template>
<div><button @click="btnClick">点击查看</button></div>
</template><script>export default { name: 'UserSchool',//名字是可以随便写的methods:{btnClick(){//向某一个频道发送数据this.$bus.$emit("changeName","Java")}}}
</script>

结果:

在这里插入图片描述

代理服务器的配置和Axios的请求发送

什么是跨域

在这里插入图片描述

如何解决跨域问题

  • 在服务器端写一个过滤器,将响应头设置为可信赖
  • 在Vue端设置代理服务器
  • 给整个tomcat设置允许跨域 实际的操作也是设置相应资源可信赖

在这里插入图片描述

代理服务器的配置(vue.config.js)

  • 在vue.config.js中配置
module.exports = {assetsDir: 'static',productionSourceMap: false,devServer: {proxy: {'/api':{ target:'http://127.0.0.1:9090',changeOrigin:true,pathRewrite:{'/api':''}}}}
}

在这里插入图片描述

Axios的请求发送

  • 请求发送第一步:导包

在这里插入图片描述

在这里插入图片描述

  • 客户端发送请求(不带参数的GET请求)

在这里插入图片描述

  • 服务器端响应

在这里插入图片描述

package com.wz.practice.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private String password;
}
package com.wz.practice.servlet;import com.alibaba.fastjson.JSON;
import com.wz.practice.pojo.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(urlPatterns = "/users")
public class UserServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("获取到的数据是:username:"+username+"password"+password);//向客户端返回json格式的数据User user = new User(1, "用户名数据", "密码数据");String data = JSON.toJSONString(user);//向客户端返回数据resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.write(data);writer.flush();writer.close();}
}

结果:

在这里插入图片描述


  • 带参数的GET请求

ProxyAxios.vue

<template>
<div><button @click="btnClick1">发送get请求不带参数 </button><br><br><button @click="btnClick2">发送get请求带参数   </button><br><br><button @click="btnClick3">发送post请求不带参数</button><br><br><button @click="btnClick4">发送post请求带参数  </button><br><br></div>
</template><script>export default { name: 'ProxyAxios',methods:{btnClick1(){//发送get请求不带参数this.$axios.get("/api/users").then(response=>{var val = response.data;console.log("获取到的数据是:"+val)},error=>{console.log("失败"+error.message)})},btnClick2(){//发送get请求带参数this.$axios.get("/api/users",{params:{username:"ZhangSan",password:"123"}}).then(response=>{var val = response.data;console.log("获取到的数据是:"+val)},error=>{console.log("失败"+error.message)})},btnClick3(){},btnClick4(){}}}
</script>

结果:

在这里插入图片描述

在这里插入图片描述


  • POST请求不带参数

在这里插入图片描述


  • POST请求带参数
    在这里插入图片描述

在这里插入图片描述

插槽slot

基本使用

  • 在userList.vue中定义一个slot
<template>
<div><h1>这里是userList的页面</h1><!-- 在这里可以定义一个插槽,插槽就是占位符 --><slot>这里就是插槽要显示内容的地方</slot></div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{language:''}},}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • 在App.vue中使用
<template>
<div id="app"><user-list><div>插槽的具体使用者</div></user-list></div></template><script>// 使用组件的第一步,导入组件import UserList from './components/UserList.vue';export default {name: 'App',//使用组件的第二部,申明这个组件components: {UserList }}
</script>

结果:

在这里插入图片描述

具名插槽

<template>
<div><h1>这里是userList的页面</h1><!-- 在这里可以定义一个插槽,插槽就是占位符 --><slot name="slot1">这里就是插槽要显示内容的地方</slot><hr><slot name="slot2">这是第二个插槽</slot></div>
</template><script>export default { name: 'UserList',//名字是可以随便写的data(){return{language:''}},}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
<template>
<div id="app"><user-list><div slot="slot1">插槽的具体使用者AAAA</div><div slot="slot2">插槽的具体使用者BBBB</div></user-list></div></template><script>// 使用组件的第一步,导入组件import UserList from './components/UserList.vue';export default {name: 'App',//使用组件的第二部,申明这个组件components: {UserList }}
</script>

结果:

在这里插入图片描述

路由

路由是控制页面跳转的

  • 导包

在这里插入图片描述

  • 编写main.js

在这里插入图片描述

  • HomePage.vue
<template>
<div style="background-color: pink;"><h1>这里是Home页面</h1><hr><div class="row"><div class="col-xs-2 col-xs-offset-2"><div class="list-group"><!-- Vue中借助router-link标签实现路由的切换 --><router-link class="list-group-item" active-class="active" to="/about">About</router-link>&nbsp;<router-link class="list-group-item" active-class="active" to="/message">Message</router-link></div></div></div><!-- 这个div主要是内容展示 --><router-view></router-view></div>
</template><script>export default { name: 'HomePage'}
</script>
<style scope>div{font-family: 楷体;font-size: 30px;}
</style>
  • AboutPage.vue
<template>
<div style="width: 100%; height: 200px; background: skyblue;">这是About页面</div>
</template><script>export default { name: 'AboutPage',data(){return{language:''}},}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • MessagePage.vue
<template>
<div style="width: 100%; height: 200px; background: rosybrown;">这是Message页面</div>
</template><script>export default { name: 'MessagePage'}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • App.vue
<template>
<div id="app"><home-page></home-page></div>
</template><script>// 使用组件的第一步,导入组件import HomePage from './components/HomePage.vue';export default {name: 'App',//使用组件的第二部,申明这个组件components: {HomePage}}
</script>

结果:

在这里插入图片描述

多级路由

需求:在Message页面中增加两个按钮,点击之后,在Message页面中显示内容

  • DetailPage.vue
<template>
<div style="width: 100%; height: 200px; background: yellowgreen;">这是Detail页面</div>
</template><script>export default { name: 'DetailPage',data(){return{language:''}},}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • NewsPage.vue
<template>
<div style="width: 100%; height: 200px; background: palevioletred;">这是News页面</div>
</template><script>export default { name: 'NewsPage',data(){return{language:''}},}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>
  • 在index.js中配置路由
//把路由导进来
import VueRouter from "vue-router";
//将要配置的路由的组件引进来(点击之后要跳转的都要配)
import AboutPage from "../components/AboutPage"
import MessagePage from "../components/MessagePage"
import DetailPage from "../components/DetailPage"
import NewsPage from "../components/NewsPage"//创建并暴露一个路由器
export default new VueRouter({routes:[{path:'/about',component:AboutPage},{path:'/message',component:MessagePage,//在那里显示就在哪里配置children:[{path:"detail",name:"detail",component:DetailPage},{path:"news",name:"news",component:NewsPage}]}]
})
  • 在Message页面中实现跳转的功能
<template>
<div><div style="width: 100%; height: 500px; background: rosybrown;"><h1>这是Message页面</h1><hr><div class="row"><div class="col-xs-2 col-xs-offset-2"><div class="list-group"><!-- Vue中借助router-link标签实现路由的切换 --><router-link class="list-group-item" active-class="active" to="/message/detail">Detail</router-link>&nbsp;<router-link class="list-group-item" active-class="active" to="/message/news">News</router-link></div></div></div><div><!-- 这个div主要是内容展示 --><router-view></router-view></div></div></div>
</template><script>export default { name: 'MessagePage'}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>

结果:

在这里插入图片描述

编程式路由

前进、后退、跳转到指定页面

  • HomePage.vue
<template>
<div style="background-color: pink;"><h1>这里是Home页面</h1><div><button @click="btnForward">前进</button> &nbsp;<button @click="btnBack">后退</button> &nbsp;<button @click="btnForwardAndBack">前进/后退</button> &nbsp;<button @click="btnJump">跳转到指定页面</button>&nbsp;</div><hr><div class="row"><div class="col-xs-2 col-xs-offset-2"><div class="list-group"><!-- Vue中借助router-link标签实现路由的切换 --><router-link class="list-group-item" active-class="active" to="/about">About</router-link>&nbsp;<router-link class="list-group-item" active-class="active" to="/message">Message</router-link></div></div></div><!-- 这个div主要是内容展示 --><router-view></router-view></div>
</template><script>export default { name: 'HomePage',methods:{btnForward(){//前进this.$router.forward();},btnBack(){//后退this.$router.back();},btnForwardAndBack(){//前进或者后退this.$router.go(-1);},btnJump(){//跳转//第一种跳转方式push,有历史,可以后退// this.$router.push({//   name:"news",//   query:{//     username:"ZhangSan",//     password:"123"//   }// })//第二种跳转方式replace,没有历史this.$router.replace({name:"news",query:{username:"ZhangSan",password:"123"}})}}}
</script>
<style scope>div{font-family: 楷体;font-size: 30px;}
</style>

在这里插入图片描述

  • 跳转页面发送的数据是可以取出来的

  • NewsPage.vue

<template>
<div style="width: 100%; height: 200px; background: palevioletred;">这是News页面</div>
</template><script>export default { name: 'NewsPage',data(){return{language:''}},mounted(){var username = this.$route.query.usernamevar password = this.$route.query.passwordconsole.log("username:"+username+"---password:"+password)}}
</script>
<style scoped>div{font-family: 楷体;font-size: 30px;}
</style>

结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90955.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习1.卷积神经网络-CNN

目录 卷积神经网络 – CNN CNN 解决了什么问题&#xff1f; 需要处理的数据量太大 保留图像特征 人类的视觉原理 卷积神经网络-CNN 的基本原理 卷积——提取特征 池化层&#xff08;下采样&#xff09;——数据降维&#xff0c;避免过拟合 全连接层——输出结果 CNN …

Oracle DBlink使用方法

DBlink作用&#xff1a;在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…

系统学习Linux-keepalived

目录 keepalived双机热备 keepalivedlvs&#xff08;DR&#xff09; 1.实验环境 先配置主调度器 web节点配置 keepalived双机热备 web服务器安装nginx和keepalived 配置好这些可以进行漂移了 复制keepalived.conf 进行修改web1为主web2为从优先级设置好 #we…

智慧仲裁 | 祝贺「璞华法律自助咨询服务平台」在成都医学城劳动纠纷一站式联处中心正式上线运营!

利用互联网开展调解&#xff0c;已成为基层调解的常态。2023年8月&#xff0c;璞华劳动人事法律自助咨询服务平台在成都医学城劳动纠纷一站式联处中心正式上线运营&#xff01; 平台可以提供智能法律咨询、法律文书模版、赔偿计算、法律法规、仲裁指引、调解指引以及各种劳动人…

springmvc没有绿标,怎么配置tomcat插件运行?

一、添加插件后&#xff0c;刷新&#xff0c;自动从maven仓库下载tomcat插件 二、写好项目后&#xff0c;添加tomcat配置 三、即可点击绿标运行

煤矿皮带运输智能监控算法 opencv

煤矿皮带运输智能监控算法通过opencvpython深度学习算法网络模型&#xff0c;煤矿皮带运输智能监控算法实时监测皮带运输过程中的各种异常情况&#xff0c;如跑偏、撕裂、堆料异常等&#xff0c;一旦检测到异常情况&#xff0c;立即发出告警并采取相应的措施&#xff0c;以保障…

matlab使用教程(29)—微分方程实例

此示例说明如何使用 MATLAB 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程&#xff1a; 1.初始值问题 vanderpoldemo 是用于定义 van der Pol 方程的函数 type vanderpoldemo function dydt vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defin…

【Datawhale】AI夏令营第三期——基于论文摘要的文本分类笔记(上)

暑期参加了Datawhale的第三期AI夏令营&#xff0c;学习的是NLP方向&#xff0c;在此期间&#xff0c;我们通过比赛打榜的形式进行NLP的学习。今天&#xff0c;主要分享和记录一下这一期夏令营的学习历程和笔记。 文章目录 赛题背景赛题任务赛题数据集评价指标解题思路任务一&am…

日本排核污水:有人2天赚了800万

来谈1个非常夸张的事&#xff0c;有人2天用它搞了800多万&#xff0c;这一波完全震惊我和小伙伴&#xff0c;哪位兄弟老哥有货和资源的抓紧去搞&#xff0c;这波红利能持续好一段时间。 24号中午发生了件大事件&#xff0c;让所有人都气愤&#xff01;流量巨大&#xff0c;不管…

Vue2向Vue3过度Vuex核心概念mutations

目录 1 核心概念-mutations1.定义mutations2.格式说明3.组件中提交 mutations4.练习5.总结 2 带参数的 mutations1.目标&#xff1a;2.语法2.1 提供mutation函数&#xff08;带参数&#xff09;2.2 提交mutation 3 练习-mutations的减法功能1.步骤2.代码实现 4 练习-Vuex中的值…

动态不确定性的动态S过程(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【【Verilog典型电路设计之log函数的Verilog HDL设计】】

Verilog典型电路设计之log函数的Verilog HDL设计 log函数是一种典型的单目计算函数&#xff0c;与其相应的还有指数函数、三角函数等。对于单目计算函数的硬件加速器设计一般两种简单方法:一种是查找表的方式;一种是使用泰勒级数展开成多项式进行近似计算。这两种方式在设计方…