2023年了,你还不会 Nuxt.js 吗?

1,127 阅读2分钟

以下代码均为伪代码,无法直接运行! 示例代码仅供参考,因为我们并没有相关的API接口

Nuxt.js 是一个基于 Vue.js 的服务端渲染应用框架,它提供了一种更好的方式来构建应用程序。在本文中,我将向您展示一个 Nuxt.js 的使用案例。

该案例是一个简单的博客网站,我们将使用 Nuxt.js 来实现以下功能:

  • 显示所有博客文章列表
  • 显示单个博客文章
  • 创建新博客文章
  • 编辑博客文章
  • 删除博客文章

首先,我们需要创建一个新的 Nuxt.js 项目。您可以使用 Nuxt.js 官方提供的命令行工具来创建一个新项目。打开终端,输入以下命令:

npx create-nuxt-app my-blog

然后按照提示进行配置,选择您需要的选项,例如:选择静态站点生成器,选择您喜欢的 CSS 框架等。

一旦您完成了配置,您可以进入您的项目文件夹并启动开发服务器:

cd my-blog
npm run dev

接下来,我们将创建一个博客文章列表。我们将在 pages 文件夹中创建一个名为“index.vue”的文件。这个文件将成为我们网站的首页。在这个文件中,我们将使用 Nuxt.js 的 asyncData 方法来获取我们的博客文章列表。该方法将在服务器端运行,以确保我们的网站在客户端加载之前就已经渲染出来了。

<template>
  <div>
    <h1>博客文章列表</h1>
    <ul>
      <li v-for="post in posts" :key="post.id">
        <nuxt-link :to="`/post/${post.id}`">{{ post.title }}</nuxt-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  async asyncData({ app }) {
    const posts = await app.$axios.$get('/posts')
    return { posts }
  },
}
</script>

接下来,我们将创建一个单独的博客文章页面。我们将在 pages 文件夹中创建一个名为“post/_id.vue”的文件。这个文件将被用来渲染单独的博客文章页面。在这个文件中,我们将使用 Nuxt.js 的 asyncData 方法来获取特定的博客文章。该方法将接受一个参数,其中包含该页面的路由参数,我们将使用这些参数来获取特定的博客文章。

<template>
  <div>
    <h1>{{ post.title }}</h1>
    <div>{{ post.content }}</div>
  </div>
</template>

<script>
export default {
  async asyncData({ app, params }) {
    const post = await app.$axios.$get(`/posts/${params.id}`)
    return { post }
  },
}
</script>

接下来,我们将创建一个用于创建新博客文章的页面。我们将在 pages 文件夹中创建一个名为“new.vue”的文件。在这个文件中,我们将创建一个表单,允许用户输入博客文章内容。我们将使用 Nuxt.js 的 $axios 模块来向服务器发送请求,以创建新的博客文章。

<template>
  <div>
    <h1>创建新博客文章</h1>
    <form @submit.prevent="createPost">
      <div>
        <label for="title">标题</label>
        <input id="title" v-model="post.title">
      </div>
      <div>
        <label for="content">内容</label>
        <textarea id="content" v-model="post.content"></textarea>
      </div>
      <button type="submit">提交</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      post: {
        title: '',
        content: '',
      },
    }
  },
  methods: {
    async createPost() {
      await this.$axios.$post('/posts', this.post)
      this.$router.push('/')
    },
  },
}
</script>

接下来,我们将创建一个用于编辑博客文章的页面。我们将在 pages 文件夹中创建一个名为“edit/_id.vue”的文件。在这个文件中,我们将创建一个表单,允许用户编辑博客文章。我们将使用 Nuxt.js 的 asyncData 方法来获取特定的博客文章,以便我们可以将其填充到表单中。我们还将使用 Nuxt.js 的 $axios 模块来向服务器发送请求,以更新博客文章。

<template>
  <div>
    <h1>编辑博客文章</h1>
    <form @submit.prevent="updatePost">
      <div>
        <label for="title">标题</label>
        <input id="title" v-model="post.title">
      </div>
      <div>
        <label for="content">内容</label>
        <textarea id="content" v-model="post.content"></textarea>
      </div>
      <button type="submit">提交</button>
    </form>
  </div>
</template>

<script>
export default {
  async asyncData({ app, params }) {
    const post = await app.$axios.$get(`/posts/${params.id}`)
    return { post }
  },
  data() {
    return {
      post: {
        title: '',
        content: '',
      },
    }
  },
  methods: {
    async updatePost() {
      await this.$axios.$put(`/posts/${this.post.id}`, this.post)
      this.$router.push(`/post/${this.post.id}`)
    },
  },
}
</script>

最后,我们将创建一个页面来删除博客文章。我们将在 pages 文件夹中创建一个名为“delete/_id.vue”的文件。在这个文件中,我们将使用 Nuxt.js 的 asyncData 方法来获取特定的博客文章。我们还将使用 Nuxt.js 的 $axios 模块来向服务器发送请求,以删除博客文章。

<template>
	<div>
		<h1>删除博客文章</h1>
		<p>您确定要删除 "{{ post.title }}" 这篇文章吗?</p>
		<button @click="deletePost">删除</button>
	</div>
</template>

<script>
	export default {
		async asyncData({
			app,
			params
		}) {
			const post = await app.$axios.$get(`/posts/${params.id}`)
			return {
				post
			}
		}
		data() {
			return {
				post: {
					title: '',
					content: '',
				},
			}
		},
		methods: {
			async deletePost() {
				await this.$axios.$delete(`/posts/${this.post.id}`) this.$router.push('/')
			},
		},
	}
</script>

现在,我们已经创建了一组简单的页面,用于管理博客文章。我们将这些页面放在一个导航栏中,以便用户可以轻松访问它们。我们将在 layouts 文件夹中创建一个名为“default.vue”的文件,并在其中包含一个简单的导航栏。

<template>
 	<div>
 		<nav>
 			<ul>
 				<li>
 					<nuxt-link to="/">首页</nuxt-link>
 				</li>
 				<li>
 					<nuxt-link to="/create">创建博客文章</nuxt-link>
 				</li>
 			</ul>
 		</nav>
 		<nuxt />
 	</div>
 </template>

最后,我们将在 nuxt.config.js 文件中配置我们的应用程序。我们将添加一个路由配置,指定我们刚刚创建的三个页面的路径。我们还将配置应用程序的端口号和主机名。

export default {
  server: {
    port: 3000,
    host: '0.0.0.0',
  },
  router: {
    extendRoutes(routes, resolve) {
      routes.push(
        {
          name: 'create',
          path: '/create',
          component: resolve(__dirname, 'pages/create.vue'),
        },
        {
          name: 'edit',
          path: '/edit/:id',
          component: resolve(__dirname, 'pages/edit/_id.vue'),
        },
        {
          name: 'delete',
          path: '/delete/:id',
          component: resolve(__dirname, 'pages/delete/_id.vue'),
        }
      )
    },
  },
}

现在,我们已经完成了我们的 Nuxt.js 应用程序。我们可以运行以下命令来启动应用程序:

npm run dev

这将启动一个开发服务器,可以访问我们的应用程序。我们可以在浏览器中打开 http://localhost:3000 来查看应用程序。

在此示例中,我们展示了如何使用 Nuxt.js 创建一个简单的博客应用程序。我们使用 Nuxt.js 的页面和布局来创建页面,并使用 $axios 模块向服务器发送请求。我们还使用 Nuxt.js 的路由配置来指定页面的路径,并使用 nuxt.config.js 文件来配置应用程序。这是一个简单的示例,可以让你快速上手 Nuxt.js。