функция onclick в vue не отображает мой пользовательский компонент

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я новичок в Vue, и я хочу отобразить компонент после того, как пользователь нажмет на кнопку. Может быть, я делаю это неправильно?

Это <sample-component> просто баннер, который должен отображаться в верхней части страницы

Пример кода

 <template>
    <div class="page">
        <div class="content">
            <sample-button @click="showBanner">
                Show banner
            </simplex-button>
        </div>
    </div>
</template>

<script lang="ts">
import Vue from 'vue';

export default Vue.extend({
    methods: {
        showBanner() {
            return `
            <template id="banner">
                <div class="banner-page">
                    <sample-component>
                        <p> hello </p>
                    </sample-component>
                </div>
            </template>`;          
        },
    },
});
</script>
  

Ответ №1:

 <template>
    <div class="page">
        <div class="content">
            <sample-button @click="showBanner()">
                Show banner
            </sample-button>
            <div id="banner" v-if="visible">
                <div class="banner-page">
                    <sample-component>
                        <p> hello </p>
                    </sample-component>
                </div>
            </div>
        </div>
    </div>
</template>

<script lang="ts">
import Vue from 'vue';

export default Vue.extend({
    data() {
        return {
            visible: false
        }
    },
    methods: {
        showBanner() {
            this.visible = true        
        },
    },
});
</script>
  

Вы просто можете отобразить его, изменив data свойство, переданное в v-if директиву

Ответ №2:

Пожалуйста, обратите внимание, что вы не должны возвращать шаблон из метода, а также вы не можете назначить id <template> тегу, поскольку они фактически не отображаются. Поэтому вам в основном нужно изменить свой шаблон на следующий:

 <template>
  <div class="page">
    <div class="content">
      <!-- note that your banner component has shifted here -->
      <div v-if="isBannerVisible" id="banner">
        <div class="banner-page">
          <sample-component>
            <p>hello</p>
          </sample-component>
        </div>
      </div>

      <sample-button @click="isBannerVisible = true">
        Show banner
      </sample-button>
    </div>
  </div>
</template>
  

и ваш скрипт также для:

 <script lang="ts">
import Vue from "vue";

// since your using Typescript it is better to use the class syntax
export default class MyComponent extends Vue {
  private isBannerVisible: boolean = false
};
</script>