Day 12 - 动态组件(Dynamic Components)

动态元件(Dynamic-Components)是指Vue可以根据传入参数的,来去切换不同的元件。

如下范例,根据点击「home」、「posts」或「archieve」,Component会依照 :is 来代入的值来动态决定载入哪一个元件。
https://codesandbox.io/s/cocky-noyce-chv89?file=/src/App.vue

<template>
  <div id="app">
    <ul class="nav">
      <li>
        <a href="#" @click.prevent="changeView('home')">home</a>
      </li>
      <li>
        <a href="#" @click.prevent="changeView('posts')">posts</a>
      </li>
      <li>
        <a href="#" @click.prevent="changeView('archive')">archieve</a>
      </li>
    </ul>
    <component :is="view"></component>
  </div>
</template>

<script>
const home = {
  // options
  template: `
   <p>This is home.<p>
  `,
};
const posts = {
  // options
  template: `
   <p>This is posts.<p>
  `,
};

const archive = {
  // options
  template: `
   <p>This is archive.<p>
  `,
};

export default {
  name: "App",
  components: {
    home: home,
    posts: posts,
    archive: archive,
  },
  methods: {
    changeView(viewName) {
      this.view = viewName;
    },
  },
  data() {
    return {
      view: "home",
    };
  },
};
</script>

当我们点选对应的超连结,便会传入对应的变数,并利用该变数切会对应的元件。

https://ithelp.ithome.com.tw/upload/images/20210927/20128925JD5XbdSePL.png

keep-alive

在动态切换元件过程中,我们可能会希望保存元件的状态,纪录元件的状态,避免重新载入元件,这时候就可以在元件外面包一层keep alive的标签。

如下范例,第二个元件包了 keep-alive>,因此在切换时不会重新 render 元件,而保留了使用者输入的资料。

<template>
  <div id="app">
    <ul class="nav">
      <li>
        <a href="#" @click.prevent="changeView('home')">home</a>
      </li>
      <li>
        <a href="#" @click.prevent="changeView('posts')">posts</a>
      </li>
      <li>
        <a href="#" @click.prevent="changeView('archive')">archieve</a>
      </li>
    </ul>
    <keep-alive>
      <component :is="view"></component>
    </keep-alive>
  </div>
</template>

https://ithelp.ithome.com.tw/upload/images/20210927/20128925lul2uUofii.png

在home tab输入文字在inputbox再切换别的超连结後再切回home,文字仍然存在在inputbox中,但如果没有加上keep-alive,便会发现home的inputbox被清空了,这是因为元件被重新载入罗!


<<:  架站:安装 Ubuntu Server

>>:  知识工作者的管理

Halcon (机器视觉)的介绍

HALCON是由德国MVtec公司开发的一套完善的商用的机器视觉算法软件, 在欧洲以及日本的工业界已...

前言

你好,我是 ALPHA Camp 的 Bernard。感谢你来阅读我的文章。这次铁人赛我会针对「成为...

Day16 测试写起乃 - 测试覆盖率

测试覆盖率在测试中的环节也是需要顾及的,我们今天会使用 SimpleCov 来算测试覆盖率 安装 S...

Day 19:专案管理

前言 专案管理是一门很深的学问,也不只是软件业,各行各业都有,最早是来自土木建筑、国防领域。 牵扯到...

Day-12: ORM系虾米捏?

ORM (Object-relational mapping ) 是一种对映射关联式资料与物件资料的...