1. Vue 封装自己的插件
效果图:
1:先创建组件,并创建index.js文件
tosi.vue文件
index.js文件
2:在main.js里面进行挂载注册
3:进行调用
2. 1、了解vuejs课程介绍
https://www.bilibili.com/video/BV15741177Eh?p=2
这个课程大概分为以下几个部分
一、邂逅vuejs
从为什么要学习,有什么特点,到安装vuejs,体验vuejs,以及学习MVVM架构。
二、vue基础语法
基础语法很多,会详细讲。
三、组件化开发
学vue必须学习组件化开发。
四、vue cli详解
webpack、vue cli脚手架的介绍
五、vue-router
前端路由
六、vuex详解
进行状态管理的
前六个是基础知识
七、网络封装
主要是axios的介绍使用
八、项目实战
3. 请教如何在vue中引入自己写的js文件
比如说我在src/util下面有一个rem.js的文件,写成自执行函数
(function(doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function() {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = (clientWidth / 12) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);})(document, window);然后在main.js中引用import './util/rem',然后每个路内由都运行起来容了
4. vue.js 文件都有什么作用
VueJS 目的:
VueJs的产生核心是为了解决:
a: 解决数据绑定的问题,
b: vue框架产生的主要目的是版为了开发大型单页面应用权,
c: 它还支持组件化,也就是可以将页面封装成若干个组件,采用积木式进行编程,这样使页面复用性达到最高(支持组件化)。
2.VueJS 特性:
I: MVVM模式(数据变量(model)发生改变 视图(view)也改变, 视图(view)改变,数据变量(model)也发生改变)
5. vue是什么 怎么用
Vue.js是一套构建用户界面的渐进式框架,Vue 采用自下向上增量开发的设计,其核心库只关注视图层,易于上手,同时vue完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。
1、MVVM即model,view,viewmodel,它是数据驱动模式,即所有的一切通过操作数据来进行,而尽量避免操作dom树。
(5)vue封装js扩展阅读:
vue在web开发、网站制作中的优势
1、据绑定:vue会根据对应的元素,进行设置元素数据,通过输入框,以及get获取数据等多种方式进行数据的实时绑定,进行网页及应用的数据渲染 。
2、组件式开发:通过vue的模块封装,它可以将一个web开发中设计的各种模块进行拆分,变成单独的组件,然后通过数据绑定,调用对应模版组件,同时传入参数,即可完成对整个项目的开发。
3、简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。
6. 支持复杂场景的vue和react集成引用的JS插件
众所周知,React更纯粹,Vue做的封装更多,所以大多数的难度都是集中在react的组件引用vue组件的过程中
请参考 https://github.com/devilwjp/vuereact-for-vuecli3-demo
请参考 https://github.com/devilwjp/vuereact-for-cra-demo
由于react hooks的取名规范是use开头,所以将use开头的方法全部修改成了apply开头,老的use开头方法仍然有效
在react组件中使用vue组件,如果要使用vue的sync修饰,使用 sync <Object>
在react组件中使用vue的组件
在react组件中,向vue组件传递具名插槽和作用域插槽,以及绑定自定义事件,以及v-model应用
react本身并不支持v-model,所以需要通过 model的value和setter也不需要变化
在react组件动态引用vue组件,类似vue的<component />
与react不同,vue有全局注册组件的功能,使每个组件不需要再单独引入
将vue全局组件的id作为参数传入applyVueInReact中,或者将id作为component属性的值传入VueContainer中
示例:在react中使用全局的vue版本element-ui的DatePicker
在Vue的组件中使用React组件
在Vue组件中,向React组件传递具名插槽和作用域插槽,以及绑定自定义事件
由于React没有插槽的概念,所有都是以属性存在,Vue的具名插槽和作用域插槽会被转化为React的属性,其中作用域插槽会转换成render props的方式
并且Vue组件的事件也会被转化成React的属性
比如react版本的antd的Card组件,在react中的使用示例如下
react版本的antd,在vue组件中使用的示例如下
作用:使得所有的Vue组件可以使用rex的状态管理
对工具包开启rex状态管理,这个场景一般存在于以React为主的项目中,为了使Vue组件也可以共享到rex,需要在项目的入口文件引入applyRex方法(整个项目应该只引一次),将rex的store以及rex的context作为参数传入(或者至少在rex的Provider高阶组件引入的地方使用applyRex方法)
React组件连接rex的方式这里就不再做介绍了,应该使用react-rex的connect方法
这里介绍Vue组件如何使用rex,工具包尽可能的实现了vue组件使用vuex的方式去使用rex,通过vm.$rex可以在组件实例里获取到rex状态管理
作用:使得所有的Rex组件可以使用Vuex的状态管理
对工具包开启vuex状态管理,这个场景一般存在于以Vue为主的项目中,为了使React组件也可以共享到vuex,需要在项目的入口文件引入applyVuex方法(整个项目应该只引一次),将vuex的store作为参数传入
类似react-rex的connect方法,在React组件中使用,由于vuex的关键字比rex多,所以将参数改成了对象,包含了mapStateToProps、mapCommitToProps、mapGettersToProps、mapDispatchToProps,每个都是一个纯函数,返回一个对象(和rex的connect使用方式完全一致)
在React的router里懒加载Vue组件
在Vue的router里懒加载React组件
每个通过applyVueInReact的的vue组件,以及通过applyReactInVue的react组件,都可以收到一个data-passed-props的属性,这个属性可以帮助你不做任何包装的,被之后再次使用applyVueInReact或applyReactInVue的组件收到全部的属性(由于是跨框架透传,原生的透传方式并不会自动做相应的封装和转换)
由于在每一次跨越一个框架进行组件引用时,都会出现一层包囊,这个包囊是以div呈现,并且会被特殊属性标注
React->Vue,会在vue组件的dom元素外包囊一层标识data-use-vue-component-wrap的div
Vue->React,会在react组件的dom元素外包囊一层标识__use_react_component_wrap的div
如果引发样式问题,可以全局对这些标识进行样式修正
7. vue中静态js文件怎么打包
1.问题描述
在项目开发中,当我们通过npm run build打包之后将文件放在服务器上时通常会出现图片失效问题,控制台中提示某个图片没有找到(404错误),这些图片可以是以src引入的图片, 也可以是css中定义的背景图片。图片能否显示与你的静态资源文件存在位置和引入
的路径直接相关,下面是我的其中一个项目的文件存放以及路径书写方式!
2.解决方法之一
静态资源static存放位置放在src目录下
以上是一种解决图片失效问题的方法,当然,如果非要把static静态资源目录放在与src同级目录下,也是有解决方法,例如通过导入图片的方式(本人未实践),可以自行尝试!
8. 47道基础的VueJS面试题(附答案)
1、什么是MVVM框架?它适用于哪些场景?
MVVM框架是一个 Model-View-View Model框架,其中 ViewModel连接模型Model)和视图(View)。
在数据操作比较多的场景中,MVVM框架更合适,有助于通过操作数据渲染页面。
2、active- class是哪个组件的属性?
它是 vue-router模块的 router-link组件的属性。
3、如何定义Vue- router的动态路由?
在静态路由名称前面添加冒号,例如,设置id动态路由参数,为路由对象的path属性设置/:id。
4、如何获取传过来的动态参数?
在组件中,使用$router对象的 params.id,即 $route.params.id 。
5、vue- router有哪几种导航钩子?
有3种。
第一种是全局导航钩子:router.beforeEach(to,from,next)。作用是跳转前进行判断拦截。
第二种是组件内的钩子。
第三种是单独路由独享组件。
6、mint-ui是什么?如何使用?
它是基于 Vue.js的前端组件库。用npm安装,然后通过 import导入样式和JavaScript代码。vue.use(mintUi)用于实现全局引入, import {Toast} from ' mint-ui'用于在单个组件局部引入。
7、V-model是什么?有什么作用?
v- model是 Vue. js中的一条指令,可以实现数据的双向绑定。
8、Vue.js中标签如何绑定事件?
绑定事件有两种方式。
第一种,通过v-on指令, 。
第二种,通过@语法糖, input@ click= doLog()/>。
9、vuex是什么?如何使用?在哪种功能场景中使用它?
vuex是针对 Vue. js框架实现的状态管理系统。
为了使用vuex,要引入 store,并注入Vue.js组件中,在组件内部即可通过$ ostore访问 store对象。
使用场景包括:在单页应用中,用于组件之间的通信,例如音乐播放、登录状态管理、加入购物车等。
10、如何实现自定义指令?它有哪些钩子函数?还有哪些钩子函数参数?
自定义指令包括以下两种。
它有如下钩子函数。
钩子函数的参数如下。
11、至少说出vue.js中的4种指令和它们的用法。
相关指令及其用法如下。
12、Vue-router是什么?它有哪些组件?
它是 Vue. js的路由插件。组件包括 router-link和 router-vIew。
13、导航钩子有哪些?它们有哪些参数?
导航钩子又称导航守卫,又分为全局钩子、单个路由独享钧子和组件级钧子。
全局钩子有 beforeEach、beforeResolve(Vue2.5.0新增的)、 afterEach。
单个路由独享钩子有 beforeEnter。
组件级钩子有 beforeRouteEnter、 beforeRouteUpdate(Vue2.2新增的) beforeRouteLeave。
它们有以下参数。
14、Vue.js的双向数据绑定原理是什么?
具体步骤如下。
(1)对需要观察的数据对象进行递归遍历,包括子属性对象的属性,设置set和get特性方法。当给这个对象的某个值赋值时,会触发绑定的set特性方法,于是就能监听到数据变化。
(4)MVVM是数据绑定的入口,整合了 Observer、 Compile和 Watcher三者,通过Observer来监听自己的 model数据变化,通过 Compile来解析编译模板指令,最终利用Watcher搭起 Observer和 Compile之间的通信桥梁,达到数据变化通知视图更新的效果。利用视图交互,变化更新数据 model变更的双向绑定效果。
15、请详细说明你对Vue.js生命周期的理解。
总共分为8个阶段,分别为 beforeCreate、created、beforeMount、 mounted、beforeUpdate、 updated、 beforeDestroyed、 destroyed。
当使用组件的kep- alive功能时,增加以下两个周期。
Vue2.5.0版本新增了一个周期钩子:ErrorCaptured,当捕获一个来自子孙组件的错误时调用。
16、请描述封装Vue组件的作用过程。
组件可以提升整个项目的开发效率,能够把页面抽象成多个相对独立的模块,解决了传统项目开发中效率低、难维护、复用性等问题。
使用Vue.extend方法创建一个组件,使用Vue.component方法注册组件。子组件需要数据,可以在 props中接收数据。而子组件修改妤数据后,若想把数据传递给父组件,可以采用emit方法。
17、你是怎样认识vuex的?
vuex可以理解为一种开发模式或框架。它是对 Vue. js框架数据层面的扩展。通过状态(数据源)集中管理驱动组件的变化。应用的状态集中放在 store中。改变状态的方式是提交 mutations,这是个同步的事务。异步逻辑应该封装在 action中。
18、Vue- loader是什么?它的用途有哪些?
它是解析.vue文件的一个加载器,可以将 template/js/style转换成 JavaScript模块。
用途是通过 vue-loader, JavaScript可以写 EMAScript 6语法, style样式可以应用scss或less, template可以添加jade语法等。
19、请说出vue.cli项目的src目录中每个文件夹和文件的用法。
assets文件夹存放静态资源;components存放组件;router定义路由相关的配置;view是视图;app. vue是一个应用主组件;main.js是入口文件。
20、在Vue.cli中怎样使用自定义组件?在使用过程中你遇到过哪些问题?
具体步骤如下。
(1)在 components目录中新建组件文件,脚本一定要导出暴露的接口。
(2)导入需要用到的页面(组件)。
(3)将导入的组件注入uejs的子组件的 components属性中。
(4)在 template的视图中使用自定义组件。
21、谈谈你对vue.js的 template编译的理解。
简而言之,就是首先转化成AST( Abstract Syntax Tree,抽象语法树),即将源代码语法结构抽象成树状表现形式,然后通过 render函数进行渲染,并返回VNode( Vue. js的虚拟DOM节点)。
详细步骤如下。
(1)通过 compile编译器把 template编译成AST, compile是 create Compiler的返回值, createCompiler用来创建编译器。另外, compile还负责合并 option。
(2)AST会经过 generate(将AST转化成 render funtion字符串的过程)得到 render函数, render的返回值是 VNode, VNode是 Vue.Js的虚拟DOM节点,里面有标签名子节点、文本等。
22、说一下Vue.js中的MVVM模式。
MVVM模式即 Model- View- ViewModel模式。
Vue.js是通过数据驱动的, Vue. js实例化对象将DOM和数据进行绑定,一旦绑定,和数据将保持同步,每当数据发生变化,DOM也会随着变化。
ViewModel是Vue.js的核心,它是 Vue.js的一个实例。Vue.js会针对某个HTML元素进行实例化,这个HTML元素可以是body,也可以是某个CSS选择器所指代的元素。
DOM Listeners和 Data Bindings是实现双向绑定的关键。DOM Listeners监听页面所有View层中的DOM元素,当发生变化时,Model层的数据随之变化。Data Bindings会监听 Model层的数据,当数据发生变化时,View层的DOM元素也随之变化。
23、v-show指令和v-if指令的区别是什么?
v-show与v-if都是条件渲染指令。不同的是,无论v-show的值为true或 false,元素都会存在于HTML页面中;而只有当v-if的值为true时,元素才会存在于HTML页面中。v-show指令是通过修改元素的 style属性值实现的。
24、如何让CSS只在当前组件中起作用?
在每一个Vue.js组件中都可以定义各自的CSS、 JavaScript代码。如果希望组件内写的CSS只对当前组件起作用,只需要在Style标签添加Scoped属性,即 。
25、如何创建vue.js组件?
在vue.js中,组件要先注册,然后才能使用。具体代码如下
26、如何实现路由嵌套?如何进行页面跳转?
路由嵌套会将其他组件渲染到该组件内,而不是使整个页面跳转到 router-view定义组件渲染的位置。要进行页面跳转,就要将页面渲染到根组件内,可做如下配置。
首先,实例化根组件,在根组件中定义组件渲染容器。然后,挂载路由,当切换路由时,将会切换整个页面。
27、ref属性有什么作用?
有时候,为了在组件内部可以直接访问组件内部的一些元素,可以定义该属性此时可以在组件内部通过this. $refs属性,更快捷地访问设置ref属性的元素。这是一个原生的DOM元素,要使用原生 DOM API操作它们,例如以下代码。
注意:在Ve2.0中,ref属性替代了1.0版本中v-el指令的功能。
28、Vue. js是什么?
Vue. js的目标是通过尽可能简单的API实现响应式的数据绑定的组件开发。
29、描述vue.js的一些特性。
Vue.js有以下持性。
(1)MVVM模式。
数据模型( Model)发生改变,视图(View)监听到变化,也同步改变;视图(View)发生改变,数据模型( Model)监听到改变,也同步改变。
使用MVVM模式有几大好处。
(2)组件化开发
(3)指令系统
(4)Vue2.0开始支持虚拟DOM。
但在Vue1.0中,操作的是真实DOM元素而不是虚拟DOM,虚拟DOM可以提升页面的渲染性能。
30、描述vue.js的特点。
Vue. js有以下特点。
31、在vue.js中如何绑定事件?
通过在v-on后跟事件名称=“事件回调函数( )”的语法绑定事件。事件回调函数的参数集合( )可有可无。如果存在参数集合( ),事件回调函数的参数需要主动传递,使用事件对象要传递 $event。当然,此时也可以传递一些其他自定义数据。如果没有参数集合,此时事件回调函数有一个默认参数,就是事件对象。事件回调函数要定义在组件的 methods属性中,作用域是 Vue. js实例化对象,因此在方法中,可以通过this使用 Vue. js中的数据以及方法,也可以通过@语法糖快速绑定事件,如@事件名称=“事件回调函数( )”。
32、请说明 组件的作用。
当 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
keep-alive>是一个抽象组件,它自身不会渲染一个DOM元素,也不会出现在父组件链中。
当在 内切换组件时,它的 activated和 deactivated这两个生命周期钧子函数将会执行。
33、axios是什么?如何使用它?
axios是在vue2.0中用来替换 vue-resource.js插件的一个模块,是一个请求后台的模。
用 npm install axios安装 axios。基于 EMAScript 6 的 EMAScript Mole规范,通过 import关键字将 axios导入,并添加到 Vue. js类的原型中。这样每个组件(包括vue.js实例化对象)都将继承该方法对象。它定义了get、post等方法,可以发送get或者post请求。在then方法中注册成功后的回调函数,通过箭头函数的作用域特征,可以直接访问组件实例化对象,存储返回的数据。
34、在 axios中,当调用 axios.post('api/user')时进行的是什么操作?
当调用post方法表示在发送post异步请求。
35、sass是什么?如何在ue中安装和使用?
sass是一种CSS预编译语言安装和使用步骤如下。
(1)用npm安装加载程序( sass-loader、 css-loader等加载程序)。
(2)在 webpack. config. js中配置sass加载程序。
(3)在组件的 style标签中加上lang属性,例如lang="scss"。
36、如何在 Vue. js中循环插入图片?
对“src”属性插值将导致404请求错误。应使用 v-bind:src格式代替。
代码如下:
9. vuejs 怎么引入第三方js
在 Vue.js 中使用第三方库的方式有:
1.全局变量
在项目中添加第三方库的最简单方式是讲其作为一个全内局变量, 挂载容到 window 对象上:
entry.js
window._ = require('lodash');
MyComponent.vue
export default {
created() {
console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..');
}
}
这种方式不适合于服务端渲染, 因为服务端没有 window 对象, 是 undefined, 当试图去访问属性时会报错.
2.在每个文件中引入
另一个简单的方式是在每一个需要该库的文件中导入:
MyComponent.vue
import _ from 'lodash';
export default {
created() {
console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..');
}
}