【问题标题】:Computed variable is undefined after button click单击按钮后计算变量未定义
【发布时间】:2017-03-01 12:09:44
【问题描述】:

完整代码:https://github.com/kenpeter/test_vue_simple_audio_2

在 Main.vue 中

我尝试通过关注此guidethis.player.currentTrack 分配新值。

selectTrack: function selectTrack(id) {
  this.player.currentTrack = Object.assign(
    {},
    this.player.currentTrack,
    { currentTrack: id },
  );
  this.player.elapsed = Object.assign(
    {},
    this.player.elapsed,
    { elapsed: 0 },
  );
  // this.play();
},

似乎没有错误,直到我点击按钮

Error: Cannot read property 'duration' of undefined

在 Main.vue 中,currentTrack.duration

<div class="player__timer">
  <div class="player__timer__elapsed" v-text="player.elapsed"></div>

  <div class="player__timer__total" v-text="currentTrack.duration"></div>
</div>

<div class="slider player__progress-bar">  
  <input type="range" :value="player.elapsed" :max="currentTrack.duration" />
</div>

从图中可以看到有一个值:274,也就是currentTrack.duration初始的值。单击按钮后,currentTrack 变为未定义。 currentTrackcomputed 值。

【问题讨论】:

    标签: node.js vuejs2 vue.js


    【解决方案1】:

    您使用currentTrack.duration 而不是player.currentTrack.duration,试试这个:

    <div class="player__timer">
      <div class="player__timer__elapsed" v-text="player.elapsed"></div>
    
      <div class="player__timer__total" v-text="player.currentTrack.duration"></div>
    </div>
    
    <div class="slider player__progress-bar">  
      <input type="range" :value="player.elapsed" :max="player.currentTrack.duration" />
    </div>
    

    【讨论】:

    • 嗨,对于 currentTrack 实际上有 2 个(同名)。一个是 player.currentTrack,另一个是计算的:{ currentTrack: function ()....}。我需要计算中的那个。如何在模板中使用计算?
    【解决方案2】:

    这是执行 object.assign 的正确方法。我上面的方法是错误的。

    let player = {
      currentTrack: 0,
      other: ""
    };
    
    console.log(player);
    
    player = Object.assign(
      {},
      player,
      { currentTrack: 2}
    );
    
    console.log(player);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      相关资源
      最近更新 更多