{"id":1262944,"date":"2025-02-24T15:57:52","date_gmt":"2025-02-24T07:57:52","guid":{"rendered":"https:\/\/docs.pingcode.com\/ask\/ask-ask\/1262944.html"},"modified":"2025-02-24T15:57:55","modified_gmt":"2025-02-24T07:57:55","slug":"vue%e9%a1%b9%e7%9b%ae%e4%b8%ad%e6%80%8e%e4%b9%88%e5%ae%9e%e7%8e%b0%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/docs.pingcode.com\/ask\/1262944.html","title":{"rendered":"vue\u9879\u76ee\u4e2d\u600e\u4e48\u5b9e\u73b0\u6743\u9650\u7ba1\u7406"},"content":{"rendered":"<p style=\"text-align:center;\" ><img decoding=\"async\" src=\"https:\/\/cdn-docs.pingcode.com\/wp-content\/uploads\/2025\/02\/f4d491d5-2770-4f4c-983f-82b77a39d646.webp?x-oss-process=image\/auto-orient,1\/format,webp\" alt=\"vue\u9879\u76ee\u4e2d\u600e\u4e48\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\" \/><\/p>\n<p><p> \u5728Vue\u9879\u76ee\u4e2d\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\u7684\u6838\u5fc3\u89c2\u70b9\u6709\uff1a<strong>\u8def\u7531\u6743\u9650\u63a7\u5236\u3001\u7ec4\u4ef6\u6743\u9650\u63a7\u5236\u3001\u63a5\u53e3\u6743\u9650\u63a7\u5236\u3001\u6743\u9650\u6570\u636e\u7ba1\u7406\u3001\u52a8\u6001\u751f\u6210\u8def\u7531<\/strong>\u3002\u5176\u4e2d\uff0c<strong>\u8def\u7531\u6743\u9650\u63a7\u5236<\/strong>\u662f\u6700\u5e38\u7528\u4e14\u57fa\u7840\u7684\u65b9\u6cd5\uff0c\u901a\u8fc7\u5728\u8def\u7531\u5b88\u536b\u4e2d\u5bf9\u7528\u6237\u6743\u9650\u8fdb\u884c\u6821\u9a8c\uff0c\u51b3\u5b9a\u662f\u5426\u5141\u8bb8\u7528\u6237\u8bbf\u95ee\u67d0\u4e9b\u8def\u7531\u3002\u8be6\u7ec6\u6765\u8bf4\uff0c\u53ef\u4ee5\u5728\u8def\u7531\u5b88\u536b\uff08\u5982 <code>beforeEach<\/code> \u94a9\u5b50\uff09\u4e2d\uff0c\u6839\u636e\u7528\u6237\u89d2\u8272\u548c\u6743\u9650\u914d\u7f6e\u52a8\u6001\u751f\u6210\u548c\u63a7\u5236\u8def\u7531\u3002<\/p>\n<\/p>\n<hr>\n<p><h3>\u4e00\u3001\u8def\u7531\u6743\u9650\u63a7\u5236<\/h3>\n<\/p>\n<p><p>\u8def\u7531\u6743\u9650\u63a7\u5236\u662f Vue \u9879\u76ee\u4e2d\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\u7684\u6838\u5fc3\u90e8\u5206\u3002\u901a\u8fc7\u5728\u8def\u7531\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u5bf9\u6bcf\u4e2a\u8def\u7531\u6dfb\u52a0\u6743\u9650\u5143\u6570\u636e\uff0c\u7136\u540e\u5728\u5168\u5c40\u8def\u7531\u5b88\u536b\u4e2d\u8fdb\u884c\u6743\u9650\u6821\u9a8c\uff0c\u786e\u4fdd\u7528\u6237\u53ea\u80fd\u8bbf\u95ee\u5176\u6743\u9650\u8303\u56f4\u5185\u7684\u8def\u7531\u3002<\/p>\n<\/p>\n<p><h4>1. \u8def\u7531\u914d\u7f6e<\/h4>\n<\/p>\n<p><p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5728\u8def\u7531\u914d\u7f6e\u4e2d\u6dfb\u52a0\u6743\u9650\u5143\u6570\u636e\u3002\u5047\u8bbe\u6211\u4eec\u4f7f\u7528 <code>meta<\/code> \u5b57\u6bb5\u6765\u5b58\u50a8\u6743\u9650\u4fe1\u606f\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">const routes = [<\/p>\n<p>  {<\/p>\n<p>    path: &#39;\/dashboard&#39;,<\/p>\n<p>    component: Dashboard,<\/p>\n<p>    meta: { requiresAuth: true, role: &#39;admin&#39; }<\/p>\n<p>  },<\/p>\n<p>  {<\/p>\n<p>    path: &#39;\/profile&#39;,<\/p>\n<p>    component: Profile,<\/p>\n<p>    meta: { requiresAuth: true, role: &#39;user&#39; }<\/p>\n<p>  },<\/p>\n<p>  {<\/p>\n<p>    path: &#39;\/login&#39;,<\/p>\n<p>    component: Login<\/p>\n<p>  }<\/p>\n<p>];<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u4e0a\u8ff0\u914d\u7f6e\u4e2d\uff0c<code>meta<\/code> \u5b57\u6bb5\u4e2d\u7684 <code>requiresAuth<\/code> \u8868\u793a\u8be5\u8def\u7531\u9700\u8981\u8eab\u4efd\u9a8c\u8bc1\uff0c<code>role<\/code> \u8868\u793a\u8be5\u8def\u7531\u5141\u8bb8\u7684\u7528\u6237\u89d2\u8272\u3002<\/p>\n<\/p>\n<p><h4>2. \u8def\u7531\u5b88\u536b<\/h4>\n<\/p>\n<p><p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5728\u5168\u5c40\u8def\u7531\u5b88\u536b\u4e2d\u8fdb\u884c\u6743\u9650\u6821\u9a8c\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">router.beforeEach((to, from, next) =&gt; {<\/p>\n<p>  const isAuthenticated = !!localStorage.getItem(&#39;token&#39;);<\/p>\n<p>  const userRole = localStorage.getItem(&#39;role&#39;);<\/p>\n<p>  if (to.matched.some(record =&gt; record.meta.requiresAuth)) {<\/p>\n<p>    if (!isAuthenticated) {<\/p>\n<p>      next(&#39;\/login&#39;);<\/p>\n<p>    } else if (to.meta.role &amp;&amp; to.meta.role !== userRole) {<\/p>\n<p>      next(&#39;\/unauthorized&#39;);  \/\/ \u6216\u8005\u91cd\u5b9a\u5411\u5230\u5176\u4ed6\u9875\u9762<\/p>\n<p>    } else {<\/p>\n<p>      next();<\/p>\n<p>    }<\/p>\n<p>  } else {<\/p>\n<p>    next();<\/p>\n<p>  }<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u4e0a\u8ff0\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u901a\u8fc7\u68c0\u67e5\u7528\u6237\u7684\u8eab\u4efd\u9a8c\u8bc1\u72b6\u6001\u548c\u89d2\u8272\u4fe1\u606f\uff0c\u6765\u51b3\u5b9a\u662f\u5426\u5141\u8bb8\u7528\u6237\u8bbf\u95ee\u67d0\u4e2a\u8def\u7531\u3002<\/p>\n<\/p>\n<p><h3>\u4e8c\u3001\u7ec4\u4ef6\u6743\u9650\u63a7\u5236<\/h3>\n<\/p>\n<p><p>\u5728 Vue \u9879\u76ee\u4e2d\uff0c\u9664\u4e86\u8def\u7531\u5c42\u9762\u7684\u6743\u9650\u63a7\u5236\u5916\uff0c\u8fd8\u9700\u8981\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u6743\u9650\u63a7\u5236\u3002\u901a\u8fc7\u5728\u7ec4\u4ef6\u5185\u90e8\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u903b\u8f91\uff0c\u53ef\u4ee5\u66f4\u7ec6\u7c92\u5ea6\u5730\u63a7\u5236\u7528\u6237\u53ef\u4ee5\u770b\u5230\u548c\u64cd\u4f5c\u7684\u5185\u5bb9\u3002<\/p>\n<\/p>\n<p><h4>1. \u6743\u9650\u6307\u4ee4<\/h4>\n<\/p>\n<p><p>\u6211\u4eec\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u81ea\u5b9a\u4e49\u6307\u4ee4\u6765\u5b9e\u73b0\u7ec4\u4ef6\u7ea7\u522b\u7684\u6743\u9650\u63a7\u5236\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">Vue.directive(&#39;permission&#39;, {<\/p>\n<p>  inserted(el, binding) {<\/p>\n<p>    const userRole = localStorage.getItem(&#39;role&#39;);<\/p>\n<p>    if (binding.value !== userRole) {<\/p>\n<p>      el.parentNode &amp;&amp; el.parentNode.removeChild(el);<\/p>\n<p>    }<\/p>\n<p>  }<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u7ec4\u4ef6\u4e2d\u4f7f\u7528\u8be5\u6307\u4ee4\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-html\">&lt;button v-permission=&quot;&#39;admin&#39;&quot;&gt;Admin Only Button&lt;\/button&gt;<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u8be5\u6307\u4ee4\u4f1a\u68c0\u67e5\u7528\u6237\u89d2\u8272\u662f\u5426\u7b26\u5408\u8981\u6c42\uff0c\u4e0d\u7b26\u5408\u8981\u6c42\u65f6\u79fb\u9664\u8be5\u5143\u7d20\u3002<\/p>\n<\/p>\n<p><h4>2. \u6743\u9650\u65b9\u6cd5<\/h4>\n<\/p>\n<p><p>\u6211\u4eec\u8fd8\u53ef\u4ee5\u5728\u7ec4\u4ef6\u5185\u90e8\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u65b9\u6cd5\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">methods: {<\/p>\n<p>  hasPermission(role) {<\/p>\n<p>    const userRole = localStorage.getItem(&#39;role&#39;);<\/p>\n<p>    return userRole === role;<\/p>\n<p>  }<\/p>\n<p>}<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u6a21\u677f\u4e2d\u4f7f\u7528\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-html\">&lt;button v-if=&quot;hasPermission(&#39;admin&#39;)&quot;&gt;Admin Only Button&lt;\/button&gt;<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><h3>\u4e09\u3001\u63a5\u53e3\u6743\u9650\u63a7\u5236<\/h3>\n<\/p>\n<p><p>\u63a5\u53e3\u6743\u9650\u63a7\u5236\u662f\u540e\u7aef\u6743\u9650\u7ba1\u7406\u7684\u4e00\u90e8\u5206\uff0c\u4f46\u5728\u524d\u7aef\u4e5f\u9700\u8981\u8fdb\u884c\u76f8\u5e94\u7684\u5904\u7406\u3002\u901a\u8fc7\u5728\u8bf7\u6c42\u62e6\u622a\u5668\u4e2d\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u903b\u8f91\uff0c\u53ef\u4ee5\u786e\u4fdd\u524d\u7aef\u8bf7\u6c42\u7b26\u5408\u7528\u6237\u6743\u9650\u3002<\/p>\n<\/p>\n<p><h4>1. \u8bf7\u6c42\u62e6\u622a\u5668<\/h4>\n<\/p>\n<p><p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 axios \u8bf7\u6c42\u62e6\u622a\u5668\u6765\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u903b\u8f91\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">axios.interceptors.request.use(config =&gt; {<\/p>\n<p>  const token = localStorage.getItem(&#39;token&#39;);<\/p>\n<p>  if (token) {<\/p>\n<p>    config.headers.Authorization = `Bearer ${token}`;<\/p>\n<p>  }<\/p>\n<p>  return config;<\/p>\n<p>}, error =&gt; {<\/p>\n<p>  return Promise.reject(error);<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u54cd\u5e94\u62e6\u622a\u5668\u4e2d\u5904\u7406\u6743\u9650\u9519\u8bef\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">axios.interceptors.response.use(response =&gt; {<\/p>\n<p>  return response;<\/p>\n<p>}, error =&gt; {<\/p>\n<p>  if (error.response.status === 403) {<\/p>\n<p>    \/\/ \u5904\u7406\u6743\u9650\u9519\u8bef<\/p>\n<p>    alert(&#39;You do not have permission to perform this action.&#39;);<\/p>\n<p>  }<\/p>\n<p>  return Promise.reject(error);<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><h3>\u56db\u3001\u6743\u9650\u6570\u636e\u7ba1\u7406<\/h3>\n<\/p>\n<p><p>\u6743\u9650\u6570\u636e\u7ba1\u7406\u662f\u6743\u9650\u63a7\u5236\u7684\u57fa\u7840\u3002\u901a\u8fc7\u5bf9\u7528\u6237\u6743\u9650\u6570\u636e\u7684\u7edf\u4e00\u7ba1\u7406\uff0c\u53ef\u4ee5\u7b80\u5316\u6743\u9650\u63a7\u5236\u903b\u8f91\uff0c\u5e76\u63d0\u9ad8\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n<\/p>\n<p><h4>1. \u6743\u9650\u6570\u636e\u7ed3\u6784<\/h4>\n<\/p>\n<p><p>\u901a\u5e38\uff0c\u6211\u4eec\u4f1a\u5728\u7528\u6237\u767b\u5f55\u65f6\u83b7\u53d6\u7528\u6237\u7684\u6743\u9650\u6570\u636e\uff0c\u5e76\u5b58\u50a8\u5728 Vuex \u6216\u672c\u5730\u5b58\u50a8\u4e2d\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">const store = new Vuex.Store({<\/p>\n<p>  state: {<\/p>\n<p>    user: null,<\/p>\n<p>    permissions: []<\/p>\n<p>  },<\/p>\n<p>  mutations: {<\/p>\n<p>    setUser(state, user) {<\/p>\n<p>      state.user = user;<\/p>\n<p>    },<\/p>\n<p>    setPermissions(state, permissions) {<\/p>\n<p>      state.permissions = permissions;<\/p>\n<p>    }<\/p>\n<p>  },<\/p>\n<p>  actions: {<\/p>\n<p>    fetchUser({ commit }) {<\/p>\n<p>      return axios.get(&#39;\/api\/user&#39;).then(response =&gt; {<\/p>\n<p>        commit(&#39;setUser&#39;, response.data.user);<\/p>\n<p>        commit(&#39;setPermissions&#39;, response.data.permissions);<\/p>\n<p>      });<\/p>\n<p>    }<\/p>\n<p>  }<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><h4>2. \u6743\u9650\u6821\u9a8c\u65b9\u6cd5<\/h4>\n<\/p>\n<p><p>\u5728 Vuex \u4e2d\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u65b9\u6cd5\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">const getters = {<\/p>\n<p>  hasPermission: (state) =&gt; (permission) =&gt; {<\/p>\n<p>    return state.permissions.includes(permission);<\/p>\n<p>  }<\/p>\n<p>};<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u5728\u7ec4\u4ef6\u4e2d\u4f7f\u7528\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-html\">&lt;button v-if=&quot;$store.getters.hasPermission(&#39;admin&#39;)&quot;&gt;Admin Only Button&lt;\/button&gt;<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><h3>\u4e94\u3001\u52a8\u6001\u751f\u6210\u8def\u7531<\/h3>\n<\/p>\n<p><p>\u52a8\u6001\u751f\u6210\u8def\u7531\u662f\u6743\u9650\u7ba1\u7406\u7684\u9ad8\u7ea7\u7528\u6cd5\u3002\u901a\u8fc7\u5728\u7528\u6237\u767b\u5f55\u540e\uff0c\u6839\u636e\u7528\u6237\u6743\u9650\u52a8\u6001\u751f\u6210\u8def\u7531\u914d\u7f6e\uff0c\u53ef\u4ee5\u786e\u4fdd\u7528\u6237\u53ea\u80fd\u8bbf\u95ee\u5176\u6743\u9650\u8303\u56f4\u5185\u7684\u8def\u7531\u3002<\/p>\n<\/p>\n<p><h4>1. \u52a8\u6001\u8def\u7531\u914d\u7f6e<\/h4>\n<\/p>\n<p><p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u52a8\u6001\u8def\u7531\u914d\u7f6e\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">const asyncRoutes = [<\/p>\n<p>  {<\/p>\n<p>    path: &#39;\/admin&#39;,<\/p>\n<p>    component: Admin,<\/p>\n<p>    meta: { role: &#39;admin&#39; }<\/p>\n<p>  },<\/p>\n<p>  {<\/p>\n<p>    path: &#39;\/user&#39;,<\/p>\n<p>    component: User,<\/p>\n<p>    meta: { role: &#39;user&#39; }<\/p>\n<p>  }<\/p>\n<p>];<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><h4>2. \u52a8\u6001\u6dfb\u52a0\u8def\u7531<\/h4>\n<\/p>\n<p><p>\u5728\u7528\u6237\u767b\u5f55\u540e\uff0c\u6839\u636e\u7528\u6237\u6743\u9650\u52a8\u6001\u6dfb\u52a0\u8def\u7531\uff1a<\/p>\n<\/p>\n<p><pre><code class=\"language-javascript\">const userRole = localStorage.getItem(&#39;role&#39;);<\/p>\n<p>const accessibleRoutes = asyncRoutes.filter(route =&gt; route.meta.role === userRole);<\/p>\n<p>accessibleRoutes.forEach(route =&gt; {<\/p>\n<p>  router.addRoute(route);<\/p>\n<p>});<\/p>\n<p><\/code><\/pre>\n<\/p>\n<p><p>\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u53ef\u4ee5\u6839\u636e\u7528\u6237\u6743\u9650\u52a8\u6001\u751f\u6210\u8def\u7531\u914d\u7f6e\uff0c\u786e\u4fdd\u7528\u6237\u53ea\u80fd\u8bbf\u95ee\u5176\u6743\u9650\u8303\u56f4\u5185\u7684\u8def\u7531\u3002<\/p>\n<\/p>\n<p><h3>\u516d\u3001\u603b\u7ed3<\/h3>\n<\/p>\n<p><p>\u5728 Vue \u9879\u76ee\u4e2d\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\u9700\u8981\u591a\u65b9\u9762\u7684\u914d\u5408\uff0c\u5305\u62ec\u8def\u7531\u6743\u9650\u63a7\u5236\u3001\u7ec4\u4ef6\u6743\u9650\u63a7\u5236\u3001\u63a5\u53e3\u6743\u9650\u63a7\u5236\u3001\u6743\u9650\u6570\u636e\u7ba1\u7406\u548c\u52a8\u6001\u751f\u6210\u8def\u7531\u3002\u901a\u8fc7\u7ed3\u5408\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9e\u73b0\u7075\u6d3b\u800c\u9ad8\u6548\u7684\u6743\u9650\u7ba1\u7406\u7cfb\u7edf\u3002\u5173\u952e\u70b9\u5728\u4e8e\u7edf\u4e00\u7ba1\u7406\u6743\u9650\u6570\u636e\uff0c\u5e76\u5728\u5404\u4e2a\u5c42\u9762\u8fdb\u884c\u6743\u9650\u6821\u9a8c\uff0c\u786e\u4fdd\u7cfb\u7edf\u7684\u5b89\u5168\u6027\u548c\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n<\/p>\n<hr>\n<h2><strong>\u76f8\u5173\u95ee\u7b54FAQs\uff1a<\/strong><\/h2>\n<p> <strong>\u5982\u4f55\u5728Vue\u9879\u76ee\u4e2d\u6709\u6548\u5730\u7ba1\u7406\u7528\u6237\u6743\u9650\uff1f<\/strong><br \/>\u5728Vue\u9879\u76ee\u4e2d\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\u53ef\u4ee5\u901a\u8fc7\u591a\u79cd\u65b9\u5f0f\u6765\u5b8c\u6210\u3002\u901a\u5e38\uff0c\u5f00\u53d1\u8005\u4f1a\u4f7f\u7528\u8def\u7531\u5b88\u536b\u3001Vuex\u72b6\u6001\u7ba1\u7406\u4ee5\u53ca\u540e\u7aef\u63a5\u53e3\u6765\u63a7\u5236\u7528\u6237\u8bbf\u95ee\u3002\u4f60\u53ef\u4ee5\u5728\u8def\u7531\u914d\u7f6e\u4e2d\u8bbe\u7f6e\u6743\u9650\u89d2\u8272\uff0c\u901a\u8fc7Vuex\u5b58\u50a8\u7528\u6237\u7684\u6743\u9650\u4fe1\u606f\uff0c\u518d\u7ed3\u5408\u540e\u7aef\u7684\u6743\u9650\u9a8c\u8bc1\u6765\u786e\u4fdd\u7528\u6237\u53ea\u80fd\u8bbf\u95ee\u4ed6\u4eec\u88ab\u6388\u6743\u7684\u8d44\u6e90\u3002<\/p>\n<p><strong>\u5982\u4f55\u5728Vue\u4e2d\u8bbe\u7f6e\u8def\u7531\u6743\u9650\uff1f<\/strong><br \/>\u5728Vue Router\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u8def\u7531\u5b88\u536b\u6765\u8bbe\u7f6e\u6743\u9650\u3002\u901a\u8fc7\u5728\u8def\u7531\u914d\u7f6e\u4e2d\u6dfb\u52a0<code>beforeEnter<\/code>\u94a9\u5b50\uff0c\u5224\u65ad\u7528\u6237\u7684\u89d2\u8272\u548c\u6743\u9650\u72b6\u6001\uff0c\u53ef\u4ee5\u63a7\u5236\u7528\u6237\u8bbf\u95ee\u7279\u5b9a\u8def\u7531\u3002\u4f8b\u5982\uff0c\u82e5\u67d0\u4e2a\u8def\u7531\u53ea\u5141\u8bb8\u7ba1\u7406\u5458\u8bbf\u95ee\uff0c\u5219\u53ef\u4ee5\u5728\u8be5\u8def\u7531\u7684\u5b88\u536b\u4e2d\u6dfb\u52a0\u903b\u8f91\u6765\u9a8c\u8bc1\u7528\u6237\u7684\u89d2\u8272\u3002<\/p>\n<p><strong>\u5982\u4f55\u4e0e\u540e\u7aef\u8fdb\u884c\u6743\u9650\u9a8c\u8bc1\uff1f<\/strong><br \/>\u6743\u9650\u7ba1\u7406\u4e0d\u4ec5\u4ec5\u662f\u524d\u7aef\u7684\u5de5\u4f5c\uff0c\u540e\u7aef\u4e5f\u9700\u8981\u8fdb\u884c\u76f8\u5e94\u7684\u9a8c\u8bc1\u3002\u5728\u7528\u6237\u767b\u5f55\u65f6\uff0c\u540e\u7aef\u5e94\u8be5\u8fd4\u56de\u7528\u6237\u7684\u6743\u9650\u4fe1\u606f\u3002\u524d\u7aef\u5728\u83b7\u53d6\u5230\u8fd9\u4e9b\u4fe1\u606f\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528Vuex\u5b58\u50a8\uff0c\u5e76\u6839\u636e\u8fd9\u4e9b\u6743\u9650\u52a8\u6001\u663e\u793a\u6216\u9690\u85cfUI\u7ec4\u4ef6\u3002\u6bcf\u6b21\u7528\u6237\u8bf7\u6c42\u6570\u636e\u65f6\uff0c\u540e\u7aef\u4e5f\u5e94\u68c0\u67e5\u7528\u6237\u7684\u6743\u9650\uff0c\u786e\u4fdd\u6570\u636e\u7684\u5b89\u5168\u6027\u548c\u5408\u89c4\u6027\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"\u5728Vue\u9879\u76ee\u4e2d\u5b9e\u73b0\u6743\u9650\u7ba1\u7406\u7684\u6838\u5fc3\u89c2\u70b9\u6709\uff1a\u8def\u7531\u6743\u9650\u63a7\u5236\u3001\u7ec4\u4ef6\u6743\u9650\u63a7\u5236\u3001\u63a5\u53e3\u6743\u9650\u63a7\u5236\u3001\u6743\u9650\u6570\u636e\u7ba1\u7406\u3001\u52a8\u6001\u751f\u6210\u8def\u7531\u3002 [&hellip;]","protected":false},"author":3,"featured_media":1262950,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[37],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/posts\/1262944"}],"collection":[{"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/comments?post=1262944"}],"version-history":[{"count":"1","href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/posts\/1262944\/revisions"}],"predecessor-version":[{"id":1262951,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/posts\/1262944\/revisions\/1262951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/media\/1262950"}],"wp:attachment":[{"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/media?parent=1262944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/categories?post=1262944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.pingcode.com\/wp-json\/wp\/v2\/tags?post=1262944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}