1. history模式,页面返回404,如何解决?
history是html5的新增api,它的功能是修改地址栏但是不向服务器发送真实请求。如果页面返回404,说明发送了请求到服务器端,但是服务器端对该请求没有做处理,解决方案就是服务器端对于这类请求重定向到某个页面即可。
2. commonjs规范
node应用由模块组成,采用的commonjs模块规范。每一个文件就是一个模块,拥有自己独立的作用域,变量,以及方法等,对其他的模块都不可见。CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。require方法用于加载模块。
CommonJS模块的特点
所有代码都运行在模块作用域,不会污染全局作用域。
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
模块加载的顺序,按照其在代码中出现的顺序。
module对象
module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
require命令
基本用法 require命令用于加载模块文件,相当于读入并执行一个js文件,然后返回该模块的exports对象,没有发现指定模块,则就会报错。
3. vue指令以及作用
在模板中可以通过指令直接访问data和methods中的属性方法
1. 分类: 指令可以写在标签上(<span 指令></span>
)或写在标签中间(<span>指令</span>
)
2. 插值: 可以再{{}}
中写js表达式 (一个普通变量、函数调用、逻辑表达式、三目运算…),写在开标签和闭合标签中间
3. 指令:
v-text: 与
{{}}
含义相同v-html: 插入字符串,解析 html
v-show: 根据表达式的值,切换元素的display的值
v-if: 根据表达式有条件渲染元素
v-show 处理的是频繁切换显示与隐藏的dom,反之则 v-if
v-else-if
v-else
v-for: 基于源数据多次渲染元素或模板块
v-bind: 动态绑定html属性
语法:**(1) v-bind:属性名=”属性值”**
**(2) :属性名="属性值"****
v-on: 事件监听
语法:**(1) v-on事件名=”函数名”**
**(2)@事件名="函数名"**
修饰符:
.stop -调用event.stopPropagation( )
.prevent -调用event.preventDefault( )
.capture -添加事件侦听器时使用capture模式
.self -只当事件是从侦听器绑定的元素本身触发时才触发回调
.{keyCode | keyAlias} -只当事件是从特定键触发时才触发回调
.native -监听组件根元素的原生事件
.once -只触发—次回调.left -(2.2.0)只当点击鼠标左键时触发
.right -(2.2.0)只当点击鼠标右键时触发
.middle -(2.2.0)只当点击鼠标中键时触发
.passive -(2.3.0)以{ passive: true }模式添加侦听器
v-model: 在表单控件或者组件上双向绑定
语法: (1) v-model=”变量名”
修饰符:
.lazy - 取代
input
监听change
事件.number - 输入字符串转为有效的数字
.trim - 输入首尾空格过滤
4. EventBus
简介:
EventBus
又称为事件总线。在 vue 中可以使用 EventBus
来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的灾难,因此才需要更完善的 vuex 作为状态管理中心,将通知的概念上升到共享状态层次。
使用:
首先在main.js中输入 var bus=new Vue() Vue.prototype.$bus=bus 然后 在a组件中输入this.$bus.$emit(‘自定义事件名’,”参数”) 然后在接收参数的b组件中输入this.$bus.$on(‘自定义事件名’,’参数’)
5. vue-router 的原理 (history、hash)
vue-router是什么?
实现更新视图但不重新加载页面。url与页面一一对应
路由跳转两种方式
声明式:通过
组件进行跳转, 显示。 编程式:通过路由实例进行跳转: this.$router
this.$router.push(“url”)
this.$router.push({path: ‘url’})
this.$router.push({name: ‘routeName’, params: {id: 1}})
this.$router.push({psth: ‘url’, query: {id: 1}})
**注意: params与path不能同时出现 **
hash模式
- 形如: localhost:8080/#/home/index
- 原理: #后面 hash 值的变化,并不会导致浏览器向服务器发送请求,也不会刷新页面。每次 hash 值发生变化,会触发
hashchange
这个事件,可以通过监听hashchange
事件得知 hash 值发生了哪些变化,并更新页面部分内容。 - 缺点: 兼容性不好,部分低版本IE浏览器无
hashchange
这个事件。
history 模式
- 形如: localhost:8080/home/index
- 原理,因为 html5 的发布,多了两个api,
pushState()
和replaceState()
。通过这两个api (1)可以改变 url 地址且不发送请求,(2)不仅可以读取历史记录栈,还可以对浏览器历史记录栈进行更改。 - 缺点: 怕刷新,刷新会向后端发送请求。