【问题标题】:v-if when router path changesv-if 当路由器路径改变时
【发布时间】:2018-04-17 16:10:42
【问题描述】:

谁能帮忙。

是否可以在路由模式更改时显示一些 DOM 元素。 代码

<div>
   <router-link v-if="$router.history.current['path'] !=='user/config'"
   class="btn btn-fill 
   btn-default" 
   tag="button" 
   to="/user/config">Change Config
    </router-link>
</div>

有效,但只有在刷新页面时,如何监听$router.history.current['path]的事件发生变化?

完整的组件代码:

    <template>
  <card class="card-user">
    <img slot="image" src="https://ununsplash.imgix.net/photo-1431578500526-4d9613015464?fit=crop&fm=jpg&h=300&q=75&w=400" alt="..."/>
       <router-link class="btn btn-fill btn-default" tag="button" to="/user/password-change">Change Passsword</router-link>
      </div>
      <div>
        <router-link class="btn btn-fill btn-default" tag="button" to="/user/password-change">Change Email</router-link>
      </div>
      <div>
        <router-link  v-if="v-if="$router.history.current['path'] !== '/user/config'"" class="btn btn-fill btn-default" tag="button" to="/user/config">Change Config</router-link>
      </div>
    </div>
  </card>
</template>
<script>
  import Card from 'src/components/UIComponents/Cards/Card.vue'
  export default {
    components: {
      Card
    },
    data () {
      return {
      }
    }
  }

</script>

但这个组件也是子用户Thx

【问题讨论】:

  • 它应该可以正常工作。创建了一个fiddle 看看。
  • @Jag 添加所有代码,该组件由用户组件呈现,所以我需要在那里发送事件?

标签: vuejs2


【解决方案1】:

我认为您的问题可能是您使用相同的 User 组件来渲染 /user/user/config 路由。如果这是设置,vue-router 不会重新加载或重新渲染组件。为了使视图对路径中的更改做出反应,一种选择是添加更改的参数。通过这种方式,路由器将处理更改(请参阅 Dynamic Route Matching 上的 vue-router 文档)。如果你不想改变你的路由来添加这个参数,一个技巧是添加一个不断变化的:key&lt;router-view&gt;

<router-view :key="$route.fullPath"></router-view>

这将在路径发生变化时触发组件的完整生命周期(请注意,这可能会影响那些不需要重新渲染的组件的性能)。 然后在你的User 组件中:

<template>
  ...
  <router-link  v-if="isNotInConfig()" class="btn btn-fill btn-default" tag="button" to="/user/config">Change Config</router-link>
  ...
</template>

<script>
export default {
  ...
  methods: {
    isNotInConfig() {
      return this.$router.history.current["path"] !== "/user/config";
    }
  },
  ...
};
<script>

现场演示

我已经完成了一个完整的工作直播demo on codesandbox.io

【讨论】:

  • 如果我在某个路径上,我想隐藏按钮?
  • 我已经编辑了这个问题,现在可能会更容易理解
  • @marco-pantaleoni 正如您所指出的,如何有条件地将重新渲染限制为一条路线(或动态路线),使其不适用于所有路线并影响性能?您在这里的回答对解决我在此处发布的问题非常有帮助:stackoverflow.com/questions/62827356/… 我可以以某种方式将整个生命周期重新渲染限制为特定 Vue 组件/视图模板中的更改吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 2016-10-04
  • 2015-03-14
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多