函数后的条件渲染 - VueJS [重复]

Posted

技术标签:

【中文标题】函数后的条件渲染 - VueJS [重复]【英文标题】:Conditional rendering after function - VueJS [duplicate] 【发布时间】:2021-05-28 17:23:39 【问题描述】:

我目前正在编写一个用于发送电子邮件的模板,并且在函数之后我想有条件地呈现一个成功或错误块。由于某种原因,它不起作用。该函数本身正在运行,但是不会呈现成功或错误块。请在下面找到我的代码。

模板:

<form v-if="success==null" @submit.prevent="sendEmail" >
     ... //form code
    <input name="submit" type="submit" class="btn" value="send" />                                        
</form>
<b-alert variant="success" v-if="success">success</b-alert>
<b-alert variant="error" v-if="!success">error</b-alert>

功能:

   data() 
        return 
            success: null
        
    ,
    methods: 

    sendEmail: (e) => 
        ... // request code
        .then((result) => 
            this.success=true
            console.log('success')
        , (error) => 
            this.success=false
            console.log('error')
        )
    

【问题讨论】:

使用 :key 和 v-else 我应该为 :key 赋予什么价值? 负责更改/渲染元素的变量。但请注意不要对多个元素使用重复键。试试我的答案。 【参考方案1】:
    您确定调用了您的成功/错误处理程序吗?/ 在您的方法 sendEmail 中,您应该定义没有箭头函数的定义
sendEmail (e) 
       ... // request code
       .then((result) => 
           this.success=true
           console.log('success')
       , (error) => 
           this.success=false
           console.log('error')
       )
   

【讨论】:

1.是的,在控制台打印日志 2.好的,我改一下,谢谢 好的,我认为箭头函数可能是问题所在,现在看起来好多了。但为什么呢? @coffee-and-code 因为 VueJS 使用它来引用组件。当您编写箭头函数时,您会丢失 this @BabacarCisséDia this 在那里可以正常工作。箭头函数获取它定义的地方的上下文,所以这个箭头函数将获取 sendEmail 上下文。如果您通过function() ,它将有自己的上下文错误this @coffee-and-code 那里最好使用箭头函数。【参考方案2】:

试试这个

<b-alert :variant="success ? 'success' : 'error'" v-if="success!=null" :key="success">
   <span v-if="success">success</span>
   <span v-else>error</span>
</b-alert>

【讨论】:

【参考方案3】:

我认为您只需要对错误块使用严格比较 喜欢:

success === false

!success 可能存在问题,因为nullfalse 都是true

您也可以使用string 代替boolean|null

var app = new Vue(
  el: '#app',
  data: 
    type: 'form',
    formData: 
      email: '',
    
  ,
  methods: 
    sendEmail() 
      if (this.formData.email) 
        this.type = 'success';
       else 
        this.type = 'error';
      

      setTimeout(() => this.type = 'form', 10000);
    
  
)
.success 
  color: green;


.error 
  color: red;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">

  <form v-if="type === 'form'" @submit.prevent="sendEmail">
    <input type="email" v-model="formData.email" />
    <button type="submit">Submit</button>
  </form>

  <div v-if="type === 'success'" class="success">Success!</div>
  <div v-if="type === 'error'" class="error">Error!</div>
</div>

【讨论】:

以上是关于函数后的条件渲染 - VueJS [重复]的主要内容,如果未能解决你的问题,请参考以下文章

vuejs啥时候使用钩子函数

vuejs函数式组件

vuejs2从入门到精通视频教程

Vuejs 条件渲染的简写

为啥条件渲染不适用于 vuejs 中的表单输入

vuejs 3:未捕获的类型错误:对象(...)不是函数[重复]