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 || '请输入内容' } } })