zoukankan      html  css  js  c++  java
  • 记一次vue2路由参数传递this指针问题

    需要船体一个data()内的对象到另一个页面。

    <player-card v-for="(note, key) in sortedtNodes"
                     :imgurl="note.avarUrl"
                     :playerId="note.playerId"
                     :title="note.playerName"
                     :label="note.kIndex"
                     @click.native="$router.push({name: 'player_topics', params: { playerId: note.playerId, playerName: note.playerName, dateFroHome: this.date }})"></player-card>

    在跳转到的页面却并没有获取到,手动打印一下是这样的结果:

    尝试将参数设置为固定值:dateFroHome: '2017-04-28'这样后端是可以获取到的。所以这里确定是this指针问题。

    所以这里的dateFroHome: this.date 的this是player-card组件里的this吧。

    问题找出来了,怎么解决呢?

    看了下官方文档《组件数据流》中的内容:

    简单来说vue是不允许将父组件中的对象引用直接传递给子组件的,为了应对这种情况,vue提供了两种方法:

    1.定义一个局部变量,并用 prop 的值初始化它:

    props: ['initialCounter'],
    data: function () {
      return { counter: this.initialCounter }
    }

    2.定义一个计算属性,处理 prop 的值并返回。

    props: ['size'],
    computed: {
      normalizedSize: function () {
        return this.size.trim().toLowerCase()
      }
    }

    可以看这样就能保证父组件的属性this.xxx都保留在父组件中给你了。

    所以我修改了一下项目:

    在父组件的computed中定义一个啥啥啥:

    computed: {
          thisDate: function () {
            var this_date = this.date;
            return this_date;
          }
        }

    然后直接传递这个thisDate就可以了:

    @click.native="$router.push({name: 'player_topics', params: { playerId: note.playerId, playerName: note.playerName, dateFroHome: thisDate }})"
  • 相关阅读:
    LVM 逻辑卷管理
    运维自动化工具 Kickstart
    运维自动化工具 Cobbler
    Python 环境
    Zabbix Agent 自动、主动注册
    Zabbix Proxy 分布式监控
    PHP 性能优化之 PHP-FPM
    PHP 缓存插件之 Zend Opcache ( 取代 APC )
    Alternative PHP Cache ( APC )
    Tomcat ( 单机多 Tomcat 并存 )
  • 原文地址:https://www.cnblogs.com/guazi/p/6798329.html
Copyright © 2011-2022 走看看