配置代理服务器和样式文件优化
配置代理服务器(方式1)前端从8080访问5000端口时会被cros拦截,因此在vue.config.js下配置一个代理服务器,他会替你转发命令
1234//开启代理服务器devServer: { proxy: 'http://localhost:5000'}
不太完美
更好的方法。(方式2)开启代理服务器
12345678910111213141516devServer:{ proxy: { //请求前缀,(路径名) '/api': { target: '<url>', pathRewrite:{'^/api':''}//用于去处前缀发送一个不带前缀的请求。 //当然,可以选择和后端服务器统一前缀,这样也可以不用去除前缀发送。 ws: true,//用于支持websocket changeO ...
axios Promise 响应封装
axiosaxios也是返回一个promise对象,他会封装两个结果,成功即为response,需要取出从服务器获得的响应数据,response.data。失败为error,需要获取为error.message。
Fetch API:Promise 驱动的异步请求
Fetchfetch是与xhr不同的另一种发送请求的方法。他本身也是一种已经实现的API。他并不需要通过回调请求,而是采用了promise的返回结果方式,采用了链式结构。
当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject,即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve(如果响应的 HTTP 状态码不在 200 - 299 的范围内,则设置 resolve 返回值的 ok 属性为 false),仅当网络故障时或请求被阻止时,才会标记为 reject。
fetch 不会发送跨域 cookie,除非你使用了 credentials 的初始化选项。(自 2018 年 8 月以后,默认的 credentials 政策变更为 same-origin。Firefox 也在 61.0b13 版本中进行了修改)123fetch('http://example.com/movies.json') .then(response => response. ...
Ajax、XHR、Fetch、Axios 关键图解
关键图解
Ajax全称(Asynchronous JavaScript And XML)
Ajax 是一个技术统称,是一个概念模型,它囊括了很多技术,并不特指某一技术,它很重要的特性之一就是让页面实现局部刷新。他可以局部刷新页面,不用重载整个页面。
XHRXHR(XmlHttpRequest)是一种用来实现Ajax的方法示例:
123456789101112131415161718<body> <script> function ajax(url) { const xhr = new XMLHttpRequest(); xhr.open("get", url, false); xhr.onreadystatechange = function () { // 异步回调函数 if (xhr.readyState === 4) { if (xhr.status === 200) { console. ...
Vue获取DOM节点和事件处理
获取dom节点。获取input的dom节点,然后让他被focus。
1this.$refs.input.focus()
然而,vue并不会改一次数据就重新渲染模板,可以设置定时器后再修改,这样就会渲染完模板。
$nextTick函数他会在模板解析完后再执行新的函数
12345...this.$nextTick(function(){ this.$refs.input.focus()}...
@blur事件。当输入框失去焦点时调用。
消息订阅发布和Vue.set使用
pubsub实现消息订阅于发布先安装pubsub
1npm i pubsub-js
可以实现消息订阅与发布,他的操作主要有subscribe订阅,unsubscribe取消订阅,publish发布消息。每次取消订阅需要获取订阅的id再用案例订阅。
123456789101112131415161718192021222324252627282930313233343536373839404142//学校<script>import pubsub from 'pubsub-js'; export default({ name:'school', data(){ return{ schoolName:'湖科大', addr:'湖南' } }, mounted(){ const pubid = pubsub.subscribe('hello',function(messageName,dat ...
HTTP连接类型:短连接VS长连接
引用自csdn
短连接:连接->传输数据->关闭连接比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
长连接:因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。连接->传输数据->保持连接 -> 传输数据-> ………..->直到一方关闭连接,多是客户端关闭连接。长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
全局事件总线实现
全局事件总线
初步想法,维系一个全局可以获得的变量,可以直接在main.js中定义一个window.x={name:hzt},然后全局都可以通过window.x获得该元素。
进一步思考,让所有的vc可以访问到该元素,可以在VueComponent.prototype上放属性。但是VueComponent必须为Vue.extend调用生成,而且他一定是新生成的VueComponent。或者直接进入源码修改
一个很重要的内置关系VueComponent.prototype._proto_ === Vue.prototype3. 因此可以在Vue.prototype中引入全局事件总线。4. 这里任然没有解决问题,因为只有一个vc或者vm实例对象才可以使用$on,$emit,因此要加一个vc,或者vm,或者直接绑定最大的父亲vm.prototype.$bus
last(最终写法)在main.js中
12345678//创建vmnew Vue({ el:'#app', render: h => h(App), beforeCrea ...
组件自定义事件:提高模块化,增强父子通信
组件的自定义事件
父子之间传值来引入问题。在以往的方法中,要从父往子传值,可以使用props,直接传值。从子向父传值,需要将父的方法通过props传递给子,然后子接收后调用方法。然后完成传值。但是这样子操作耦合性太强,不好分离模块化。因此引入一个新的写法。组件自定义事件。写法:
v-on方法。直接在子组件的标签上绑定上自定义事件,并于自己的方法绑定。例:<Student v-on:action="getStudentName"/>其中action是我们自定义的事件名,他会和 Student相关联。然后被绑定到父组件的getStudnetName方法上。注意:他会将action自定义事件绑定再vc标签所对应的vc实例上。其次,再在Student组件中,你需要定义一个方法,绑定一个按钮或者什么事件来触发方法,用这个方法来触发你所自定义的事件,然后与父组件的方法联动使用。12345678<button @click = "getName">点我</button>....methods:{ getNam ...
Kotlin 语言特性:DTO、默认参数、集合操作
创建 DTO (POJO/POCO)1data class Customer(val name: String, val email: String)
会为 Customer 类提供以下功能:
所有属性的 getter (对于 var 定义的还有 setter)
equals()
hashCode()
toString()
copy()
所有属性的 component1()、 component2()……等等
可以设置函数的默认参数,同样该默认参数也可以设置在类中。1fun foo(a: Int = 0, b: String = "") { …… }
过滤list列表使用filter方法。
123val positives = list.filter { x -> x > 0 }//或者更短val positives = list.filter { it > 0 }
map的使用方法1val map = mapOf("a" to 1, "b&qu ...