【问题标题】:Vuejs - getting a querystring value into a componentVuejs - 将查询字符串值放入组件中
【发布时间】:2021-03-16 07:45:18
【问题描述】:

我有一个这样的查询字符串:

https://someurl.com?q=test

我有一个像这样的组件:

Vue.component('externalrecipes', {
props: ['results'],
template: `
    <section>
        <div class="" v-for="result in results">
            <div class="card card-similar card-external text-center">
                <img :src="result.image_url" />
                <div id="meta" class="text-center">
                    <h5>{{ result.title }}</h5>
                    <a target="_blank" :href="'https://www.wine-searcher.com/find/' + q + '/1/uk'" role="button">Buy Wine</a>
                </div>
            </div>
        </div>
    </section>
`
})

但是,这不起作用。我希望能够将查询字符串中 'q' 的值传递给这行代码:

<a target="_blank" :href="'https://www.wine-searcher.com/find/' + q + '/1/uk'" role="button">Buy Wine</a>

我该怎么做呢?

【问题讨论】:

  • 你在用vue-router吗?
  • 不,我不是,我的 vue 之旅还很早,我还没有接触到路由器。
  • 似乎您必须在组件的上下文中通过道具或数据属性定义q
  • 好的,我该怎么做?
  • 在实例化组件时添加一个 q(或者可能是 queryId)道具。或者您使用通过v-for 指令定义的result 项目的属性

标签: javascript vue.js query-string


【解决方案1】:

您必须在组件上下文中定义q 变量。您可以使用 props 执行此操作(在组件实例化时设置值),但在您的用例中,从通过 v-for 使用的 result 对象中检索其值是有意义的。 检查以下 sn-p 以获取“道具中的查询”和“结果中的查询”示例。 您必须知道/定义此查询值的来源。您的 results 项目或父组件

Vue.component('externalrecipes_props', {
props: ['results', 'query'],
template: `
    <section>
        <div v-for="result in results">
            <div class="card card-similar card-external text-center">
                <img :src="result.image_url" />
                <div id="meta" class="text-center">
                    <h5>{{ result.title }}</h5>
                    <a target="_blank" :href="'https://www.wine-searcher.com/find/' + query + '/1/uk'" role="button">Buy Wine</a>
                </div>
            </div>
        </div>
    </section>
`
});

Vue.component('externalrecipes_result', {
props: ['results'],
template: `
    <section>
        <div class="" v-for="result in results">
            <div class="card card-similar card-external text-center">
                <img :src="result.image_url" />
                <div id="meta" class="text-center">
                    <h5>{{ result.title }}</h5>
                    <a target="_blank" :href="'https://www.wine-searcher.com/find/' + result.query + '/1/uk'" role="button">Buy Wine</a>
                </div>
            </div>
        </div>
    </section>
`
});

new Vue({
  el: '#app',
});
.card {
  display: flex;
  margin: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <div>
    <p>Include query in props</p>
    <externalrecipes_props :results="[
      {
        title: 'Some result',
        image_url: 'https://via.placeholder.com/100'
      }]" query="merlot" />
  </div>
  <div>
    <p>Include query in results items</p>
    <externalrecipes_result :results="[
      {
        title: 'Some result',
        image_url: 'https://via.placeholder.com/100',
        query: 'merlot'
      }]" />
  </div>
</div>

【讨论】:

  • 感谢 Fred,但上面的例子没有用。第二个示例不起作用,因为该字符串在 JSON 对象中不可用。
  • 为了让上面的例子正常工作,你需要在实例化它时将值传递给组件&lt;externalrecipes :results="..." queryId="toBeInsertedInQuery" /&gt;
  • 抱歉,Fred,这也不起作用 - 你有没有机会为我制作一个小提琴,以便我看看发生了什么?
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 2017-02-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2021-12-24
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多