😄--前端面试整理--VueJs
2018-04-08 本文已影响0人
YI_YI_
1、Vue的指令都有哪些?
(1)v-bind 单向的绑定数据 缩写 :
(2)v-model 双向的绑定数据
(3)v-on 绑定事件 缩写@
(4)v-html 原始的HTML标签的识别
(5)插值表达式 {{}}
(6)v-text 将所有的文本进行变换
(7)v-自定义指令
(8)v-show
(9)v-once 指令(只执行一次命令)
(10)v-for (for ... in 对象|数组|字符串|数字 )
(11)v-if
(12)v-else
(13)v-else-if
2、Vue的生命周期函数
(1)beforeCreate:function(){}
(2)Created:function(){}
(3)beforeMount:function(){}
(4)mounted:function(){}
(5)beforeUpdate:function(){}
(6)updated:function(){}
(7)activated keep-alive组件激活时调用。
该钩子在服务器端渲染期间不被调用。
(8)deactivated keep-alive组件停用时调用。
该钩子在服务端渲染期间不被调用。
(9) beforeDestory:function(){}
(10) destroyed:function(){}
3、除了生命周期函数还有哪些钩子函数
定义一个自定义指令对象,可以使用如下几个钩子函数
(1)bind:function(el){
//只调用一次,指令第一次绑定到元素上的时候进行调用。
// 可以进行初始化状态的设置
}
(2)inserted:function (el){
//被绑定的元素插入到父节点的时候被调用(仅保证父节点存在,但不一定已被插入文档中)
}
(3)updated:function(el){
//所在的组件VNode更新时调用,但是可能发生在其子VNode更新之前。
}
(4)componentUpdated:function(el){
//指令所在的组件VNode和其子VNode全部更新后调用。
}
(5)unbind:function(el){
//只调用一次,指令与元素解绑的时候调用
}
钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。
(6)钩子函数的参数
el: 与指令所绑定的元素,可以用来直接操作DOM节点。
binding:一个对象,包含许多可读属性,使用时需要查看文档
4、Vue组件是怎么进行销毁?
5、Vue-cli使用的过程中遇到过什么样的坑?
Vue1.0升级2.0有很多的坑,
(1)生命周期;(2)路由中引入静态js;(3)全局组件;全局变量;全局函数;
(4)v-for循环的可key与value值互换了位置,还有filter过滤器;
(5)遍历数组时,key值不能做model;
(6)父子通信等等
6、Vue中是怎样使用sass的?
(1)在webpack的配置中进行设置,在项目中webpack.base.conf.js中设置
{
test: /\.sass$/,
loaders: ['style', 'css', 'sass']
}
(2)<style lang="scss">
7、谈谈对Vue的理解
Vue
(1)使用Vue适合开发小型的项目,并且可以熟练的应用HTML和CSS,
并且拥有强大的第三方库的支持。
(2)Vue也使用了React的Virtual Node、React和组件化的思想、
可以让我们集中精力去编写应用,而不是应用的性能。
(3)对于不是Angular和React经验的团队来说,Vue.js是一个很好的选择并且拥有中文社区。
Vue 数据双向绑定
(1)使用的是ES5提供的 object.defineProperty()方法,监控对数据的操作。从而可以自动触发数据同步。
(2)由于在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检查
Vue 什么时候使用
如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue
如果你喜欢简单和”能用就行”的东西,请使用Vue
如果你的应用需要尽可能的小和快,请使用Vue
8、Vue是怎样是实现路由嵌套的呢?
(1)引入vue-router的文件
(2)使用router-link 组件进行导航,to 属性指定了链接
(3)配置路由的出口,路由配置的组件渲染的地方
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用 router-link 组件来导航. -->
<!-- 通过传入 `to` 属性指定链接. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
(4) 如果使用模块化机制编程、导入Vue和VueRouter,要调用 Vue.use()
import Vue from 'vue'
import Router from 'vue-router'
//组件的引入,需要配置路由的组件
import goodslist from '@/components/goodslist'
import goodsdetail from '@/components/goodsdetail'
Vue.use(Router)
//实例化 路由对象
export default new Router({
routes: [
{
path: '/',
name: 'goodslist',
component: goodslist
},
{
path: '/goodsdetail/:goodsid',
name: 'goodsdetail',
component: goodsdetail
} ]
})
9、解释一下mvvm模式,如何实现双向数据绑定?
Angular
在不同的mvvm的框架中,实现双向数据绑定的技术有所不同。
(1)AngularJs采用的是“脏值检查机制”;
(2)当数据发生变更之后,对于所有的数据和视图的绑定关系进行一次检测,识别是否数据发生了变化。
(3)所以以上的过程可能会循环多次,一直到不再有数据变化发生之后,将变更的数据发送给视图,更新页面的显示。
(4)如果手动对view model的数据进行变更,为确保变更同步给视图,需要手动的触发“脏值检查”
Vue
(1)使用的是ES5提供的 object.defineProperty()方法,监控对数据的操作。从而可以自动触发数据同步。
(2)由于在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检查
10、做一个项目的时候,怎么选择框架呢?
(1)影响团队技术选型的因素有很多,比如技术组成、新技术、新框架、语言及发布等。
(2)为了更好的考量不同的因素,需要列出重要的象限,
如开发效率、团队喜好、依次来决定哪个框架更加适合当前的团队和项目。
(3)上线的时间影响框架的选择,不要盲目的更换现有的框架
10.1 为什么选择Vue、Angular、React三者框架的选择呢?
Vue
(1)使用Vue适合开发小型的项目,并且可以熟练的应用HTML和CSS,
并且拥有强大的第三方库的支持。
(2)Vue也使用了React的Virtual Node、React和组件化的思想、
可以让我们集中精力去编写应用,而不是应用的性能。
(3)对于不是Angular和React经验的团队来说,Vue.js是一个很好的选择并且拥有中文社区。
AngularJS
(1)当我们在制作一个应用,它对性能要求不是很高的时候,那么我们应该选择开发速度更快的技术栈AngularJS。
(2)对于复杂的前端应用来说,基于 Angular.js应用的运行效率,仍然有大量地改进空间。
(3)Angular2需要学习新的语言,需慎重选择。
React
(1)选择React有两个原因,
一、通过Virtual DOM提高运行效率;
二、通过组件化提高开发效 率。
大型项目首选。
三、另外选择React还有_个原因是:React Native、React VR等等,可以让 React运行在不同的平台之上。
四、我们还能通过React轻松编写出原生应用,还有VR应用。
五、令人遗憾的是React只是一个View层,它是为了优化DOM的操作而诞生的。
为了完成一 个完整的应用,我们还需要路由库、执行单向流库、web AP丨调用库、测试库、依赖管理库 等等,为了完整搭建出一个完整的React项目,我们还需要做大量的额外工作。
11、Vue单页面的应用在移动端的时候,有什么问题?
12、页面打开的时候,怎么样input框自动聚焦?
解决的方法:自定义指令
在需要自动聚焦的元素上绑定命令
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
15、Vue中使用过什么组件插件吗?
(1)手动引入文件
alias: {
'vue$': 'vue/dist/vue.common.js',
'src': resolve('src'),
'assets': resolve('src/assets'),
'components': resolve('src/components'),
// 2. 定义别名和插件位置
"jquery": path.resolve(__dirname, '../static/js/jquery.min.js')
}
(2)通过npm 安装依赖引入
修改webpack配置文件
...
var webpack = require("webpack") // 1. 确保引入 webpack,后面会用到
module.exports = {
...
resolve: {
extensions: ['.js', '.vue', '.json'],
modules: [
resolve('src'),
resolve('node_modules')
],
alias: {
'vue$': 'vue/dist/vue.common.js',
'src': resolve('src'),
'assets': resolve('src/assets'),
'components': resolve('src/components'),
// 2. 定义别名和插件位置
'jquery': 'jquery'
}
},
plugins: [
// 3. 配置全局使用 jquery
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
jquery: "jquery",
"window.jQuery": "jquery"
})
]
}
16、vue封装的组件如何调用接口呢?举例说明如何在父组件中调用接口?
父组件给子组件进行传值
子组件给父组件传值
36、比较Vue和React
一、React和Vue的相似之处
(1)使用了Virtual DOM
(2)提供了响应式(Reactive)和组件化(Composable)的视图组件;
(3)将注意力集中保持在核心库中,伴随于此,有配套的路由和负责管理全局状态的库
二、性能
针对现实情况的测试中,Vue 的性能是优于React的。
三、生态圈
Vue.js: ES6+Webpack+unit/e2e+Vue+vue-router+单文件组件+vuex+elementUI
React: ES6+Webpack+Enzyme+React+react-router+redux
四、什么时候选择Vue.js
Vue
如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue
如果你喜欢简单和”能用就行”的东西,请使用Vue
如果你的应用需要尽可能的小和快,请使用Vue
React
如果你计划构建一个大型应用程序,请使用React
如果你想要一个同时适用于Web端和原生App的框架,请选择React
如果你想要最大的生态圈,请使用React