您的位置:

Vue面试题2023

一、Vue.js简介

Vue.js是一款渐进式JavaScript框架,由尤雨溪(Evan You)于2014年发起并开发。Vue.js采用MVVM(Model-View-ViewModel)模式,能够轻松地实现双向数据绑定,并能够很好地配合其他框架进行使用。Vue.js具有简单易学、高效灵活、组件化等优点,因此备受前端开发者的喜爱。

二、Vue.js的基础知识

1、Vue.js的生命周期:Vue.js将组件的创建、更新、销毁等过程称为生命周期,每个组件有自己的生命周期,例如:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。其中,beforeCreate和created是最先执行的两个生命周期函数,适合做一些初始化的操作;beforeMount和mounted分别在挂载前和挂载后执行;beforeUpdate和updated在数据更新前和更新后执行;beforeDestroy和destroyed在销毁前和销毁后执行。


// Vue组件生命周期示例

Vue.component('app', {
  template: '
   
{{ message }}
', data: function() { return { 'message': 'Hello, Vue.js!' } }, beforeCreate: function() { console.log('beforeCreate'); }, created: function() { console.log('created'); }, beforeMount: function() { console.log('beforeMount'); }, mounted: function() { console.log('mounted'); }, beforeUpdate: function() { console.log('beforeUpdate'); }, updated: function() { console.log('updated'); }, beforeDestroy: function() { console.log('beforeDestroy'); }, destroyed: function() { console.log('destroyed'); } }); var app = new Vue({ el: '#app' });

2、Vue.js的指令:Vue.js提供了多种指令(Directive),用于对DOM元素进行操作。例如:v-if、v-show、v-for等,其中,v-if用于条件渲染,v-show用于控制元素的显示与隐藏,v-for用于循环渲染元素。


// Vue指令示例


   
  • {{ item.text }}
Vue.component('app', { template: '

' +'
Show

' +'
Show/Hide
', data: function() { return { show: true, items: [ { id: 1, text: 'item1' }, { id: 2, text: 'item2' }, { id: 3, text: 'item3' } ] } }, methods: { clickHandler: function() { this.show = !this.show; } } }); var app = new Vue({ el: '#app' });

三、Vue.js的路由

Vue.js提供了vue-router插件用于实现单页应用程序(SPA)的路由。Vue.js的路由功能可以将不同的组件展示在同一个页面中,通过URL进行路由跳转。使用vue-router插件可以轻松实现路由导航、路由参数传递、路由组件传参等功能。


// Vue路由示例

// 定义组件1
var Home = {
  template: '
   

Home

' }; // 定义组件2 var About = { template: '

About

' }; // 定义路由 var routes = [ { path: '/', component: Home }, { path: '/about', component: About } ]; // 创建路由实例 var router = new VueRouter({ routes: routes }); // 创建Vue实例并挂载到#app元素上 var app = new Vue({ router: router }).$mount('#app');

四、Vue.js的组件通信

1、父组件向子组件传递数据:可以通过向子组件传递props属性来传递数据。


// 在父组件中传递数据


   

<script>
  import Child from './Child.vue';

  export default {
    components: {
      Child
    },
    data: {
      parentData: 'Hello'
    }
  }
</script>

// 在子组件中接收数据


   

<script>
  export default {
    props: {
      propName: String
    }
  }
</script>

2、子组件向父组件传递数据:可以通过向父组件传递自定义事件来传递数据。


// 在子组件中传递数据


   

<script>
  export default {
    methods: {
      clickHandler: function() {
        this.$emit('child-event', 'Hello');
      }
    }
  }
</script>

// 在父组件中接收数据


   

<script>
  import Child from './Child.vue';

  export default {
    components: {
      Child
    },
    data: {
      childData: ''
    },
    methods: {
      receiveData: function(data) {
        this.childData = data;
      }
    }
  }
</script>

五、Vue.js的动画

Vue.js提供了Vue.transition组件用于实现动画效果,可以通过CSS或JS动画实现各种动画效果。其中,Vue.js主要提供了以下3种过渡状态:enter、leave和move。


// Vue动画示例


   

<script>
  export default {
    data: {
      isShow: true
    },
    methods: {
      clickHandler: function() {
        this.isShow = !this.isShow;
      }
    }
  }
</script>

// CSS动画实现


// JS动画实现
<script>
  export default {
    data: {
      isShow: true
    },
    methods: {
      clickHandler: function() {
        this.isShow = !this.isShow;
      }
    },
    transition: {
      'fade': {
        enter: function(el, done) {
          Velocity(el, 'fadeIn', { duration: 500, complete: done });
        },
        leave: function(el, done) {
          Velocity(el, 'fadeOut', { duration: 500, complete: done });
        }
      }
    }
  }
</script>