【问题标题】:How to pass props to form in another component in Vue如何在Vue的另一个组件中传递道具以形成
【发布时间】:2017-10-10 03:26:19
【问题描述】:

我正在尝试以某种方式通过 $router.push 传递预定义的表单数据,因此当单击该链接时,一些预定义的数据/道具应该以 dropdrow 之类的形式定义,或者只是将一些数据传递到输入表单

我尝试了不同的方法,但没有任何效果,有人可以帮助我吗?

在我要传递数据的另一个 Vue 组件中输入:

<input type="text" name="" value="">

点击路由器:

<ul>
  <li @click="clickRouter(path)"> Click here </li>
</ul>

data() {
    return {
      path: '/products',
    };
  },
  methods: {
    clickRouter(link) {
      this.$router.push(link);
    },
  },

更新: 根据Programmatic Navigation,您可以这样做:

// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

现在这个 URL ?plan=private 我希望能够做类似/register?name=Myname的事情

这将在组件中预填充名称输入。

干杯

【问题讨论】:

    标签: vue.js vuejs2 vue-component vuex


    【解决方案1】:

    你尝试了哪些方法?

    我看到了两种可能性:

    1. 在父组件中设置属性
    2. 使用 vuex

    clickRouter-方法会设置属性,然后将其绑定到input-字段中。

    更新:

    index.js(路由器):

    import Vue from "vue";
    import Router from "vue-router";
    import register from "@/components/register";
    
    Vue.use(Router);
    
    const router = new Router({
        routes: [
            {
                path: "/register",
                name: "register",
                component: register
            }
        ]
    });
    export default router;
    

    App.vue:

    <template>
        <div id="app">
            <header>
                <button @click.stop.prevent:="clickRouter(path)">Go to register</button>
            </header>
            <main>
                <router-view></router-view>
            </main>
        </div>
    </template>
    
    <script>
        export default {
            name: "app",
            data () {
                return {
                    path: '/register',
                    prefill: ''
                }
            },
            methods: {
                clickRouter(link) {
                    this.prefill = 42;
                    this.$router.push({ path: link, query: { plan: 'private' }});
                }
            }
        }
    </script>
    

    register.vue:

    <template>
        <input <input type="text" name="" :value="prefill">
    </template>
    
    <script>
        export default {
            computed: {
                prefill() {
                    return this.$parent.prefill;
                }
            }
        }
    </script>
    

    【讨论】:

    • 我不会使用 vuex,我猜它会变得复杂。我应该如何在父组件中使用属性?我不明白?我想要传递数据的 vue 组件是一个搜索过滤器/表单,而 clickRouter 只需要传递一些预定义的搜索结果,比如主类别等......并且有几个类别
    • 路由器不负责传递状态,也不应该这样做。它的工作是更改基于 URL 的 UI,并且它应该以不依赖于前一个组件的本地数据的方式工作。如果你需要在远程组件之间共享状态,听起来你需要某种形式的共享状态管理,专业的解决方案确实是 vuex,但也有简单的解决方案,比如:vuejs.org/v2/guide/…
    • 我刚刚更新了我的问题以提供更多详细信息@LinusBorg,如果这不可能,我将考虑简单的状态管理或通过 vuex 传递值
    • @mathias 能否请您给我看一个示例,说明 clickRouter 如何设置属性而不是将其绑定到输入字段?
    • @MathiasNater 谢谢你的回答,我刚刚看到你的回答。谢谢你的时间
    猜你喜欢
    • 2018-11-20
    • 2020-12-21
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2021-12-02
    相关资源
    最近更新 更多