Vue 面试题 目录

Vue 中有哪些组件通信的方式?

推荐答案

在 Vue 中,组件通信的方式主要有以下几种:

  1. Props 和 Events:父组件通过 props 向子组件传递数据,子组件通过 $emit 触发事件向父组件传递数据。
  2. $refs:父组件通过 ref 属性获取子组件的实例,直接调用子组件的方法或访问其数据。
  3. $parent$children:通过 $parent 访问父组件实例,通过 $children 访问子组件实例。
  4. provideinject:祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据。
  5. Event Bus:创建一个全局的 Vue 实例作为事件总线,组件通过 $on 监听事件,通过 $emit 触发事件。
  6. Vuex:使用 Vuex 进行全局状态管理,组件通过 mapStatemapGettersmapActions 等辅助函数与 Vuex 进行交互。

本题详细解读

1. Props 和 Events

  • Props:父组件通过 props 向子组件传递数据。子组件通过 props 选项接收数据。
  • Events:子组件通过 $emit 触发事件,父组件通过 v-on 监听事件并处理数据。
-- -------------------- ---- -------
---- --- ---
----------
  --------------- ------------------------ ---------------------- --
-----------

--------
------ ------- -
  ------ -
    ------ -
      -------------- ------ ---- -------
    --
  --
  -------- -
    ------------------------ -
      ------------------ - -----------
    -
  -
--
---------

---- --- ---
----------
  -----
    ----- ------- ------
    ------- ----------------------------- ----------------
  ------
-----------

--------
------ ------- -
  ------ ------------
  -------- -
    --------------- -
      -------------------- ---- ------- ---- --------
    -
  -
--
---------

2. $refs

  • $refs:父组件通过 ref 属性获取子组件的实例,可以直接调用子组件的方法或访问其数据。
-- -------------------- ---- -------
---- --- ---
----------
  --------------- ----------- --
  ------- ----------------------------- ----- ---------------
-----------

--------
------ ------- -
  -------- -
    ----------------- -
      -------------------------------
    -
  -
--
---------

---- --- ---
----------
  -----
    -------- -------------
  ------
-----------

--------
------ ------- -
  -------- -
    ------------- -
      ------------------ ------ ---------
    -
  -
--
---------

3. $parent$children

  • $parent:子组件通过 $parent 访问父组件实例。
  • $children:父组件通过 $children 访问子组件实例。
-- -------------------- ---- -------
---- --- ---
----------
  --------------- --
-----------

--------
------ ------- -
  --------- -
    ---------------------------- -- -------
  -
--
---------

---- --- ---
----------
  -----
    -------- -------------
  ------
-----------

--------
------ ------- -
  --------- -
    -------------------------- -- -------
  -
--
---------

4. provideinject

  • provide:祖先组件通过 provide 提供数据。
  • inject:后代组件通过 inject 注入数据。
-- -------------------- ---- -------
---- ---- ---
----------
  -----
    --------------- --
  ------
-----------

--------
------ ------- -
  --------- -
    ------ -
      -------- ------ ---- ---------
    --
  -
--
---------

---- ---- ---
----------
  -----
    ----- ------- ------
  ------
-----------

--------
------ ------- -
  ------- -----------
--
---------

5. Event Bus

  • Event Bus:创建一个全局的 Vue 实例作为事件总线,组件通过 $on 监听事件,通过 $emit 触发事件。
-- -------------------- ---- -------
-- -----------
------ --- ---- ------
------ ----- -------- - --- ------

-- ---
------ - -------- - ---- -------------
------ ------- -
  -------- -
    ------------- -
      ------------------------- ------ ---- --------- ----
    -
  -
--

-- ---
------ - -------- - ---- -------------
------ ------- -
  --------- -
    ----------------------- --------- -- -
      ---------------------
    ---
  -
--

6. Vuex

  • Vuex:使用 Vuex 进行全局状态管理,组件通过 mapStatemapGettersmapActions 等辅助函数与 Vuex 进行交互。
-- -------------------- ---- -------
-- --------
------ --- ---- ------
------ ---- ---- -------

--------------

------ ------- --- ------------
  ------ -
    -------- ------ ---- -----
  --
  ---------- -
    -------------------- ----------- -
      ------------- - -----------
    -
  --
  -------- -
    --------------- ------ -- ----------- -
      ----------------------- ------------
    -
  -
---

-- --
----------
  -----
    ----- ------- ------
    ------- ----------------------------- ----------------
  ------
-----------

--------
------ - --------- ---------- - ---- -------

------ ------- -
  --------- -
    ------------------------
  --
  -------- -
    --------------------------------
  -
--
---------
纠错
反馈