前端面试真题:提前准备,面试不紧张

 

21.对vue.js的template编译的理解
首先转化成AST抽象语法树,Abstract Syntax Tree,就是将源代码语法结构抽象成树状表现形式,然后通过render函数进行渲染,并返回VNode(Vue.js的虚拟dom节点)。
 
通过compile编译器把template编译成AST,compile是createCompiler的返回值,createCompiler用来创建编译器,compile还负责合并option;AST会经过generate-将AST转换成render function 字符串的过程-得到render函数,render的返回值是VNode,VNode是Vue.js的虚拟DOM节点,里面有标签名,子节点,文本等。
 
22.v-show指令和v-if指令的区别
它们都是条件渲染指令,不同的是,v-show的值无论是true或false元素都会存在于html页面中,而v-if的值为true时,元素才会存在于html页面中。
 
v-show指令是通过修改元素的style属性值实现的。
 
23.让css只在当前组件中起作用
只需要在style标签中添加scoped属性,<style scoped></style>
 
24.在vue.js中如何实现路由嵌套
路由嵌套会将其他组件渲染到该组件内,而不是使整个页面跳转到router-view定义组件渲染的位置,要进行页面跳转,要将页面渲染到根组件内。首先实例化根组件,在根组件中定义组件渲染容器,然后,挂载路由,当切换路由时,将会切换整个页面。
 
new Vue({

 el: '#dada',

 router: router,

 template: '<router-view></router-view>'

})
25.在vue.js中的ref属性有什么作用
可以直接访问组件内部的一些元素,定义属性可以在组件内部通过this.$refs属性,,访问设置ref属性的元素,这是一个原生的DOM元素,要使用原生DOM API操作它们。
 
26.在vue.js开发环境下调用接口,如何避免跨域
在config/index.js内对proxyTable项进行如下配置:
 
proxyTable: {

 '/api': {

   target: 'http://xxx.com',

   changeOrign: true,

   pathRewrite: {

    '^/api': ''

   }

  }

}
27.axios是什么
axios是vue2.0中用来替换vue-resource.js插件的一个模块,是一个请求后台资源的模块
 
使用npm install axios来安装axios
 
import Vue from 'vue'

import axios from 'axios';

Vue.prototype.$http = axios;

new Vue({

 el: 'dada',

 data: {

  mag: ''

 },

 template: '<h1>{{msg}}</h1>',

 created: function() {

  this.$http.get('data.json').then(res=>{

   this.msg = res.data.data

  })

 }

})

当调用axios.post('api/user')时,表示发送post异步请求。
 
28.sass是什么
sass是一种css预编译语言,用npm安装加载程序;在webpack.config.js中配置sass加载程序


module: {

 // 加载程序

 loaders: {

  // 加载scss

  {

   test: /\.scss$/,

   loader: 'vue-style-loader!css-loader!sass-loader'

  }

 }

}
29.什么情况下会产生片段实例
模板包含多个顶级元素;模板只包含普通文本;模板只包含其他组件,模板只包含一个元素指令,如vue-router的<router-view>;模板根节点有一个流程 控制指令,如v-if或v-for
 
这些情况让实例有未知数量的顶级元素,模板将把它的DOM内容当作片段。片段实例仍然会正确地渲染内容。不过,模板没有一个根节点,它的$el指向一个锚节点,即一个空的文本节点。
 
在vue2.0中,组件的模板只允许有权只有一个根节点。
 
30.  实现多个根据不同条件显示不同文字的方法
<div id="app">

 <input type="text" v-model="inputValue">

 <h1>{{showValue}}</h1>

</div>

var app = new Vue({

 el: '#app',

 data: {

  inputValue: ''

 },

 computed: {

  showValue: function() {

   return this.inputValue || '请输入内容'

  }

 }

})