代码之家  ›  专栏  ›  技术社区  ›  adnanmuttaleb

使用嵌套路由渲染组件时出现的问题vue.js

  •  0
  • adnanmuttaleb  · 技术社区  · 5 年前

    在使用路由之前,我有以下几点 Dashboard 组件:

    <template>
      <div>
        <RegistrationForm v-on:add-employee="addEmployee" />
        <EmployeeTable
          v-bind:employees="employees"
          v-on:delete-employee="deleteEmployee"
        />
      </div>
    </template>
    <script>
    ...
    export default {
      components: {
        EmployeeTable,
        RegistrationForm
      },
      data() {
        return {
          employees: []
        };
      },
      methods:{
        deleteEmployee() {...}
        addEmployee() {...}
      }
    }
    </script>
    

    我想把路线分开——一条用于注册新员工,另一条用于列出所有员工,所以我首先做的是更新上面的模板:

    <template>
      <div>
        <router-view/>
      </div>
    </template>
    

    然后我定义了一个路由器对象:

    export default new Router({
        mode: 'history',
        routes: [
            {
                path: "/dashboard",
                name: "dashboard",
                component: Dashboard,
                children: [
                    {
                        path: 'add-employee',
                        component: RegistrationForm, 
                    },
                    {
                        path: 'list-employees',
                        component: EmployeeTable, 
                    }
                ]
            }
        ]
    });
    

    我的问题是如何通过 employees 状态变量和 deleteEmployee , addEmployee 方法从 仪表板 组件到其子组件?

    更新: 我不知道为什么我没有收到关于这个问题的任何回复,尽管这在其他框架中是一项常见而琐碎的任务,例如 React :

    ...
    export default function BasicExample() {
      const [x, setX] = useState("World");
      return (
        <Router>
          <div>
            <ul>
              <li>
                <Link to="/">Home</Link>
              </li>
            </ul>
            <Switch>
              <Route exact path="/">
                <Home x={x}/>
              </Route>
            </Switch>
          </div>
        </Router>
      );
    }
    
    function Home({x}) {
      return (
        <div>
          <h2>Hello {x}</h2>
        </div>
      );
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   adnanmuttaleb    4 年前

    使用后 Vue路由器 在短时间内,我得出结论,这不是一个限制,而更像是一个设计决策:

    • React路由器 :更像是一个条件渲染器,e.i从父组件中并基于当前路径渲染适当的子组件。

    • Vue路由器 :更像是一种布线解决方案。

    我也不得不说:类似的行为 React路由器 可以通过以下方式实现 Vue路由器 。这是通过组合路由器的 currentRoute property v-if 指令,它真正从DOM中插入/删除组件(而不是使用隐藏它 css 作为 v-show 做)。

    最后:分离路由配置具有优势,因为它产生了更多的模块化项目和更好的SPA。当然,这种分离可以在两种情况下完成 Vue路由器 React路由器 (看 here 对于 React路由器 ).