【问题标题】:Vuejs and laravel -NaN value?Vuejs 和 laravel -NaN 值?
【发布时间】:2020-07-17 09:56:11
【问题描述】:

我想从控制器中恢复一个变量并显示它,但它显示 NaN 而不是值。 这个想法是在我的控制器中以函数调用进度来计算我的项目的进度,而不是在我的 Html 代码中的表格中显示它。 这是我在控制器中的函数,它返回正确的值:

public function progress($id){

   $tasks=Task::where(['projet_id'=>$id])->get();
   $x=0;
   $i=0;
    foreach ($tasks as $task) {

        $x = $x + $task->progress;
        $i++ ;
     }
     $progress=$x/$i;
     return $progress;
}

这是我想在 project.vue 中显示进度的地方:

    <tr v-for="projet in projets.data" :key="projet.id" >
    <td @change="avancemant(projet.id)">
    {{ parseInt(100 * progress ) }}%
    <img :src="`/img/icon/verif.png`" style="width:15px; 
     v-if="`${parseInt(100*progress)}`==100" >
    </img>
    <div class="progress">
    <div class="progress-bar bg-success" role="progressbar" aria-valuenow="0"   
    id="progress" v-model="form.progress" 
    aria-valuemin="`${parseInt(100*task.progress)}`":style=" 
    {'width':`${parseInt(100*progress)}%`}" aria-valuemax="100">
     </div>
     </div>             
     </td>

这是我的 project.vue 脚本:

  export default {
         data(){
             return{
          progress:'',
          projets:{},
          projet:{
              id:''
          },
          }}
        created(){
        this.avancement(this.projet.id);
        }
        methods:{
         avancemant($id){
           axios.get('/api/progress/'+$id).then(({data})=>(this.progress =data.data));;
         },
        } 

P.S : 它以 NaN% 显示我

【问题讨论】:

  • 你在 Vue 中的 this.progress 中有什么?你能提供变量的值吗?
  • 获取后通过控制台记录this.progress开始调试。或者在开发者控制台的网络标签中查看值是什么。我怀疑你从你的 api 中得到了错误的数据。
  • 在 vue 中未定义
  • @SølveTornøe 问题不在于数据 api,因为当我尝试 tp 时,将 1 作为 projet.id 放在创建部分的函数 avancemant 中它可以工作
  • 好的,您确定projets.data 中的所有项目都具有您的api 的有效ID?我真的建议您查看网络选项卡并检查使您收到 NaN 的呼叫。

标签: laravel vue.js nan laravel-6


【解决方案1】:

在你创建的函数中,你告诉 vue 运行函数this.avancement,参数为this.projet.id。由于您将数据对象设置为以下内容:

data() {
  return {
    progress:'',
    projets:{},
    projet:{
      id:''
    },
  }
}

这意味着当您的代码执行 created 钩子内的代码时,它将使用您数据的当前状态。

created(){
  this.avancement(this.projet.id); // this.projet.id's value at this point is '' (empty string)
}

因此,当您的函数运行 http 请求时,您将发送以下内容:

axios.get('/api/progress/'+'').then(({data})=>(this.progress =data.data));

这可能会破坏您的 API,因为它需要某种类型的 id。

此时,我没有来自您的应用程序或目标的足够信息来了解您为什么在创建时运行它。但目前解决此问题的解决方案是在您的 avancement 函数中添加一个条件,以便在 id 无效时不运行它。

methods:{
  avancemant($id){
   if(isNaN($id)) {
      return
   }
    axios.get('/api/progress/'+$id).then(({data})=>(this.progress =data.data));;
  },
} 

【讨论】:

  • Sølve Tornøe 你说得对,$id 有问题,它没有通过路线
  • 最大的问题在于 created(){ this.avancement(this.projet.id);} 知道如何解决它吗??
  • 我只是在上面解释了原因。在创建时,this.projet.id 是一个空字符串..
  • 有什么想法可以解决或替换它吗?因为在没有现在 projet.id 的情况下创建了 declanche 我尝试了很多方法但我失败了
猜你喜欢
  • 2021-06-02
  • 2021-02-03
  • 2021-08-23
  • 2018-03-27
  • 2018-09-20
  • 2020-05-26
  • 2016-03-10
  • 2019-01-06
相关资源
最近更新 更多