最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Vue : Conditional render of div based on v-if, But i dont want to show the div if it returns null - Stack Overflow

programmeradmin2浏览0评论

I have the following html with conditional render using v-if

    <div v-if="showdiv">
        <p>Content 1 here</p>
    </div>
    <div v-if="!showdiv">
        <p>Content 2 here</p>
    </div>

In data variable I have set

data() {
  render {
     showdiv: ''
  }
}

So I have an api, whose response decides whether showdiv is false or true. But sometimes api is slow, then the value of showdiv should be null and none of the div must be shown, But in my case showdiv is taken as false and this get displayed

    <div v-if="!showdiv">
        <p>Content 2 here</p>
    </div>

I dont want both the divs to be displayed when the value is null.I only want to render the div if its true or false, in other cases let it not show. What i can do to achieve that ?

I have the following html with conditional render using v-if

    <div v-if="showdiv">
        <p>Content 1 here</p>
    </div>
    <div v-if="!showdiv">
        <p>Content 2 here</p>
    </div>

In data variable I have set

data() {
  render {
     showdiv: ''
  }
}

So I have an api, whose response decides whether showdiv is false or true. But sometimes api is slow, then the value of showdiv should be null and none of the div must be shown, But in my case showdiv is taken as false and this get displayed

    <div v-if="!showdiv">
        <p>Content 2 here</p>
    </div>

I dont want both the divs to be displayed when the value is null.I only want to render the div if its true or false, in other cases let it not show. What i can do to achieve that ?

Share Improve this question edited May 5, 2020 at 14:15 theFrontEndDev asked May 5, 2020 at 14:07 theFrontEndDevtheFrontEndDev 9732 gold badges20 silver badges44 bronze badges 2
  • Have an isLoading flag and show loading when it is true and when it is false only then render your other divs. – Utsav Patel Commented May 5, 2020 at 14:11
  • @UtsavPatel I dont want to set a loader for this api too as page takes too long to load if i have to wait for this api, I have loader in place already for the basic details to get loaded. I only want to render the div if its true or false, in other cases let it not show – theFrontEndDev Commented May 5, 2020 at 14:14
Add a ment  | 

2 Answers 2

Reset to default 3

You can check explicitly if the typeof showdiv is boolean or not and based on that show the divs like:

<div v-if="typeof showdiv === 'boolean' && showdiv">
  <p>Content 1 here</p>
</div>
<div v-if="typeof showdiv === 'boolean' && !showdiv">
  <p>Content 2 here</p>
</div>

Demo:

new Vue({
  el: "#myApp",
  data: {
    showdiv: ''
  },
  async mounted() {
    // wait for 2 second
    await new Promise(resolve => setTimeout(resolve, 2000));
    this.showdiv = true;
  },
})
<script src="https://cdnjs.cloudflare./ajax/libs/vue/2.5.17/vue.min.js"></script>
<link href="https://stackpath.bootstrapcdn./bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
<div id="myApp">
  <div>
    <p>The content divs will show after few seconds . . .</p>
  </div>
  <div v-if="typeof showdiv === 'boolean' && showdiv">
    <p>Content 1 here</p>
  </div>
  <div v-if="typeof showdiv === 'boolean' && !showdiv">
    <p>Content 2 here</p>
  </div>
</div>

try like this:

<div v-if="showdiv === true">
  <p>Content 1 here</p>
</div>
<div v-if="showdiv === false">
    <p>Content 2 here</p>
</div>

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论