Vue.use()
官方文档
通过全局方法 Vue.use()
使用插件。它需要在你调用 new Vue()
启动应用之前完成:
// 调用 `MyPlugin.install(Vue)`
Vue.use(MyPlugin)
new Vue({
// ...组件选项
})
也可以传入一个可选的选项对象:
Vue.use(MyPlugin, { someOption: true })
Vue.use
会自动阻止多次注册相同插件,届时即使多次调用也只会注册一次该插件。
Vue.js 官方提供的一些插件 (例如 vue-router
) 在检测到 Vue
是可访问的全局变量时会自动调用 Vue.use()
。然而在像 CommonJS 这样的模块环境中,你应该始终显式地调用 Vue.use()
:
// 用 Browserify 或 webpack 提供的 CommonJS 模块环境时
var Vue = require('vue')
var VueRouter = require('vue-router')
// 不要忘了调用此方法
Vue.use(VueRouter)
源码
import { toArray } from '../util/index'
export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
// 已注册 - 遍历是否存在
if (installedPlugins.indexOf(plugin) > -1) {
return this
}
// additional parameters
const args = toArray(arguments, 1)
// 头插
args.unshift(this)
// 判断install方法存在
if (typeof plugin.install === 'function') {
plugin.install.apply(plugin, args)
} else if (typeof plugin === 'function') {
plugin.apply(null, args)
}
// 注册 - 存入
installedPlugins.push(plugin)
return this
}
}
export function toArray (list: any, start?: number): Array<any> {
start = start || 0
let i = list.length - start
const ret: Array<any> = new Array(i)
while (i--) {
ret[i] = list[i + start]
}
return ret
}
Vue-route
路由模式
- hash: http://localhost:8080/#/login
hash值指的是地址栏#号及后面的字符,其发生改变不会导致浏览器向服务器发送请求
hash值改变触发onhashchange事件,方便控制浏览器的进退控制
兼容IE8 - history:http://localhost:8080/login
利用HTML5 History Interface pushState()和replaceState()方法pushState(state, title, url)
浏览器不会向服务端请求数据,直接改变url地址,但会记录pushState的历史记录,可以使用浏览器的前进、后退
replaceState(state, title, url)
不同于pushState,replaceState仅仅是修改了对应的历史记录
刷新地址请求访问服务器
兼容IE10