Nuxt.js:用 Vue.js 打造服务端渲染应用程序

Nuxt.js:用 Vue.js 打造服务端渲染应用程序_第1张图片

文章目录

  • I. 简介
    • Nuxt.js是什么
    • Nuxt.js的历史和发展
    • Nuxt.js的特点和优势
      • 1. 服务端渲染
      • 2. 自动生成路由
      • 3. 静态文件服务
      • 4. 异步数据加载
      • 5. 基于Webpack的构建系统
      • 6. 支持模块化的Vue组件
      • 7. 可定制的ESLint与StyleLint
      • 8. 支持PWA等高级功能
  • II. Nuxt.js基础
    • Nuxt.js的安装和配置
    • Nuxt.js的目录结构
    • Nuxt.js中的页面组件
    • Nuxt.js中的布局
    • Nuxt.js中的动态路由
  • III. Nuxt.js高级应用
    • Nuxt.js中的异步数据加载
    • Nuxt.js中的服务端渲染
    • Nuxt.js中的静态文件服务
    • Nuxt.js中的动态头部信息
    • Nuxt.js中的插件
    • Nuxt.js中的过滤器
    • Nuxt.js中的中间件
  • IV. Nuxt.js集成
    • Nuxt.js + GraphQL
    • Nuxt.js + Firebase
    • Nuxt.js + Strapi
    • Nuxt.js + WordPress
  • V. 总结
    • Nuxt.js的优点和缺点
      • 优点
      • 缺点
    • Nuxt.js适合哪些应用场景
    • Nuxt.js的未来展望

I. 简介

Nuxt.js是什么

Nuxt.js是一个基于Vue.js的服务端渲染框架,它提供了一些特性,比如代码分割、自动生成路由、支持模块化的Vue组件、静态文件服务、页面缓存等等,使得Vue.js应用程序更加易于开发和维护。通过服务端渲染,Nuxt.js可以让应用程序更快地加载和渲染,并且能够更好地支持搜索引擎优化(SEO)。

Nuxt.js的核心特性包括:

  • 服务端渲染
  • 自动生成路由
  • 静态文件服务
  • 异步数据加载
  • 基于Webpack的构建系统
  • 支持模块化的Vue组件
  • 可定制的ESLint与StyleLint
  • 支持PWA等高级功能。

使用Nuxt.js可以使得Vue.js应用程序更加易于开发和维护,同时提供了更好的SEO和更快的页面渲染速度等优点。

Nuxt.js的历史和发展

Nuxt.js 的历史可以追溯到 2016 年,当时它是由一名开发者加入了 Vue.js 社区的第三方项目 Vue.js Meta Framework,也就是在 Vue.js 的基础上进行二次封装,以提供更好的服务端渲染和SEO等方面的支持。后来这个项目的名称改为 Nuxt.js,也就是今天的 Nuxt.js。

2018 年,Nuxt.js 推出了 v2.0 版本,它引入了新的自动生成路由、模块化开发、服务端渲染等功能,大幅提升了应用程序的开发效率和用户体验。之后,Nuxt.js 继续推出了很多新功能,例如支持 PWA(Progressive Web App)、静态文件服务、增强的中间件机制等等,使得 Nuxt.js 被越来越多的开发者选用。

目前,Nuxt.js 已经成为了一个全面的服务端渲染框架,并与许多流行的技术如 GraphQL、Firebase、Strapi、WordPress 等进行了集成。Nuxt.js 还是一个极其活跃的开源社区,有成千上万的开发者在为它捐献代码,提供文档和支持,为开发者们打造更佳的开发体验。

Nuxt.js的特点和优势

Nuxt.js 是一个基于 Vue.js 的服务端渲染框架,提供了很多特性和优势,使得 Vue.js 应用程序开发更加便捷、高效、可维护。

接下来,让我们来看一下 Nuxt.js 的特点和优势:

1. 服务端渲染

Nuxt.js 支持服务端渲染,在第一次访问页面时,服务器会直接返回一个已经包含了 HTML、CSS 和 JavaScript 等代码的渲染好的页面,可以极大地提高页面的加载速度和SEO效果。

2. 自动生成路由

Nuxt.js 可以帮助我们自动生成路由,只需要按照约定好的目录结构,就能自动生成对应的路由配置,非常便捷。同时,也支持自定义路由配置,能够满足更复杂的业务需求。

3. 静态文件服务

Nuxt.js 支持静态文件服务,使得我们可以直接通过浏览器访问到静态文件,同时还支持预处理器,能够让我们更加高效地管理和调试静态资源。

4. 异步数据加载

Nuxt.js 支持异步数据加载,在服务端或客户端请求数据时,可以通过提供一个 asyncData 方法来进行数据加载,使得我们能够更好地对页面的数据进行控制,同时也可以提高整体的性能和使用体验。

5. 基于Webpack的构建系统

Nuxt.js 基于 Webpack 来实现打包和编译,提供了很多可配置的选项,使得我们能够更好地控制整个构建流程,并生成不同的构建版本,非常灵活。

6. 支持模块化的Vue组件

Nuxt.js 支持模块化的 Vue 组件,使得我们能够更好地组织和管理组件,并提供了一些内置的组件来帮助我们实现一些常见的功能。

7. 可定制的ESLint与StyleLint

Nuxt.js 内置了 ESLint 和 StyleLint,可以帮助我们在代码编写阶段就发现潜在的问题,并提供了很多可配置的选项,满足不同的需求。

8. 支持PWA等高级功能

Nuxt.js 支持 PWA(Progressive Web App)等高级功能,在移动端访问时会展示类似于原生应用程序的页面,具有类似于离线访问、消息推送等特性,提高了使用体验。

总的来说,Nuxt.js 具有很多特点和优势,包括服务端渲染、自动化的路由配置、静态文件服务、异步数据加载、基于Webpack的构建系统等。这些特点有助于提高Vue.js应用程序的性能和可维护性,同时也使得开发工作更加高效和愉悦。

II. Nuxt.js基础

Nuxt.js的安装和配置

Nuxt.js 的安装和配置非常简单,跟 Vue.js 的安装基本一致。

下面是一份常规的安装和配置指南,供大家参考:

  1. 安装 Node.js(Version >= 12.x),并且 Git 要求的Git Bash
  2. 全局安装 Vue CLI:npm install -g vue-cli
  3. 创建一个新的 Nuxt.js 项目:vue init nuxt-community/starter-template my-project。这一步会创建一个名为 my-project 的项目,可以把 my-project 换成你喜欢的项目名称。
  4. 进入项目目录并安装依赖:cd my-projectnpm install
  5. 启动项目:npm run dev。这一步会启动一个开发服务器,并自动开启热重载服务,当你修改了代码后会自动编译和刷新页面。

如果需要对 Nuxt.js 进行更多的配置,可以调整 nuxt.config.js 文件。在这个文件中,你可以配置路由、中间件、插件等多个选项。

此外,在使用 Nuxt.js 之前,你需要对 Vue.js 框架有一定的了解和掌握,在一定程度上能够帮助你更快更好地上手和使用 Nuxt.js。

Nuxt.js的目录结构

Nuxt.js 的目录结构是一个非常重要的部分,决定了项目的整体架构和组织方式。

下面是一个常用的 Nuxt.js 目录结构:

my-project/
  |—— assets/            # 存放公共的 CSSJS 和图片等静态资源,该目录会被 webpack 构建编译。
  |—— components/        # 存放应用中的可复用组件
  |—— layouts/           # 布局模板文件存放目录,用于定义页面的布局结构
  |—— middleware/        # 中间件存放目录,用于在渲染页面前后,执行一些自定义逻辑
  |—— pages/             # 存放应用的视图文件,用于自动生成应用的客户端路由映射
  |—— plugins/           # 存放插件代码,将会在运行时自动引入并初始化
  |—— static/            # 存放无需编译的静态文件,如 .png、 .jpg
  |—— store/             # 存放应用的 Vuex 状态管理+ 代码
  |—— nuxt.config.js     # Nuxt.js 配置文件
  |—— package.json       # 项目配置文件
  |—— README.md          # 项目文档

上述目录结构中,重点需要了解的是以下几个目录:

  • assets:用于存放 CSS、JS 和图片等静态资源,会被 webpack 构建编译。
  • components:用于存放可复用组件,每个组件都是一个单独的 Vue.js 组件。
  • layouts:用于定义应用的布局文件,可以根据需要自定义布局模板,并在不同的页面中使用。
  • middleware:用于存放中间件,可以在渲染页面前后,执行一些自定义逻辑,例如认证、权限管理等。
  • pages:用于定义页面组件,Nuxt.js 会根据页面组件的目录结构,自动生成应用的路由配置。
  • plugins:用于存放插件代码,会自动引入并初始化,例如 axios、babel 等。
  • static:用于存放无需编译的静态文件,例如图片、字体等。
  • store:用于存放应用的 Vuex 状态管理代码,可以将应用的状态统一管理。

总的来说,Nuxt.js 的目录结构以功能模块为主线,使得我们在开发时更容易维护和扩展。因此,熟练掌握目录结构是 Nuxt.js 开发的一个基本要求。

Nuxt.js中的页面组件

Nuxt.js 中,页面组件是指用来渲染特定页面的 Vue.js 组件。页面组件必须满足一定的命名规范和目录结构,才能够被 Nuxt.js 自动识别并生成路由。

下面是定义页面组件的一些规则:

  1. 页面组件必须放置到 pages 目录下。
  2. 页面组件的文件名必须为以下格式之一:index.vue(匹配目录下的 index.htmlindex.phpindex.md等)、_slug.vue(匹配 ID 动态参数)或任何其他自定义名称。
  3. 页面组件必须导出一个 Vue.js 组件(使用 export default 导出),可以包含模板、脚本、样式等部分。
  4. 根据需要,页面组件可以使用 Nuxt.js 提供的 asyncDatahead 等选项进行数据加载和元信息设置。
  5. 页面组件可以引用其他组件、静态资源等。

例如,如果我们想要创建一个 /blog 页面,那么可以在 pages 目录下创建一个名为 blog.vue 的文件,并在其中定义一个 Vue.js 组件,如下所示:

<template>
  <div>
    <h1>Welcome to my Blogh1>
    <ul>
      <li v-for="post in posts" :key="post.id">
        <nuxt-link :to="{ path: '/blog/' + post.slug }">{{ post.title }}nuxt-link>
      li>
    ul>
  div>
template>

<script>
export default {
  asyncData({ app }) {
    return {
      posts: app.$axios.$get('/api/posts')
    }
  }
}
script>

<style>
/* 样式代码 */
style>

在上面的代码中,我们定义了一个带有 templatescriptstyle 部分的 Vue.js 组件,用来渲染 /blog 页面。这个组件包含了一个 asyncData 选项,用来获取服务器上的文章数据,并在渲染页面前传递给组件。另外,组件中使用的 nuxt-link 标签会自动转换为 a 标签,使得页面能够响应读者的点击操作。

总之,页面组件是 Nuxt.js 应用程序中的一个重要部分,用来实现页面的渲染、数据加载、路由映射等功能。对于开发者来说,了解页面组件规则和开发过程非常重要。

Nuxt.js中的布局

在 Nuxt.js 中,布局(Layout)用来定义页面的整体结构和样式,在页面组件中布局可以包含多个子组件。布局是一种可重用的模板,可以被多个页面组件复用。

下面是使用布局的一些规则:

  1. layouts 目录下新建一个 Vue 组件,用来定义页面的整体结构和样式。
  2. 布局组件中一般包含一个 标签,用来嵌入不同的页面组件。
  3. 在页面组件中,指定使用的布局组件,可以使用 layout 属性或者设置 middleware
  4. 在布局组件中可以使用 标签来指示子组件的位置。

例如,在 layouts 目录下创建 default.vue 布局组件:

<template>
  <div>
    <header>这是顶部header>
    <main>
      <nuxt-child/>
    main>
    <footer>这是底部footer>
  div>
template>

<style>
/* 样式代码 */
style>

在页面组件中,指定使用 default 布局组件:

<template>
  <div>
    <h1>Welcome to my Blogh1>
    <p>{{ message }}p>
  div>
template>

<script>
export default {
  layout: 'default',
  data() {
    return {
      message: 'Hello from my blog page!'
    }
  }
}
script>

<style>
/* 样式代码 */
style>

在上面的代码中,我们定义了一个名为 default.vue 的布局组件,该组件包含了头部、页面主体和底部。在页面组件中,我们使用 layout 属性指定使用 default 布局组件,并且在 data 中定义了一个 message 数据,用来显示欢迎消息。

总而言之,布局是 Nuxt.js 中非常重要的一个概念,可以用来定义页面的整体结构和样式。布局可以被多个页面组件复用,使得应用程序更加易于维护和扩展。

Nuxt.js中的动态路由

在 Nuxt.js 中,动态路由(Dynamic Routes)是一种可以通过 URL 中的参数来自动匹配对应页面组件的路由。动态路由可以用来实现复杂的路由映射,方便开发者管理和维护路由结构。

例如,我们要实现一个 /blog/:slug 的动态路由,其中 :slug 表示文章的唯一标识符,用来匹配对应的文章详情页。这时候,我们可以在 pages 目录下创建一个名为 _slug.vue 的页面组件,用来渲染文章详情页面。_slug 表示这是一个动态路由,后面的参数可以自动匹配到该页面组件上。

下面是一个实现动态路由的例子:

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

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

<style>
/* 样式代码 */
style>

在上面的代码中,我们定义了一个名为 _slug.vue 的页面组件,用来渲染文章详情页面。其中,asyncData 选项用来获取服务器上的文章数据,params 参数包含了当前路由中的所有动态参数,比如 slug 参数。在这个例子中,我们通过 app.$axios.$get 方法获取指定文章数据,然后将其返回给页面组件。

总之,动态路由是 Nuxt.js 中非常重要的一个特性,可以用来实现复杂的路由映射,方便开发者管理和维护路由结构。

III. Nuxt.js高级应用

Nuxt.js中的异步数据加载

在 Nuxt.js 中,异步数据加载是指页面在渲染前从服务器获取数据,然后将数据填充到页面中。Nuxt.js 提供了 asyncData 方法来处理异步数据加载。

asyncData 方法会在组件实例化之前被调用,可以用于异步获取数据,然后将数据填充到组件的 dataprops 属性中。当服务端渲染时,asyncData 方法会在服务器端调用,数据会预获取并注入到 HTML 中。当客户端渲染时,asyncData 方法会在客户端异步获取数据,然后重新渲染组件。

下面是一个使用 asyncData 加载异步数据的例子:

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

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

在上面的代码中,我们定义了一个名为 asyncData 的方法,用来获取服务器上的文章数据。在 asyncData 方法中,我们使用 $axios.$get 方法来获取指定文章数据,并将其返回给页面组件。

总之,异步数据加载是 Nuxt.js 中一个非常重要的特性,可以用来处理组件中的异步数据请求。asyncData 方法不仅可以用于服务端渲染,也可以用于客户端异步加载数据,使得页面的数据和渲染更加优化。

Nuxt.js中的服务端渲染

在 Nuxt.js 中,服务端渲染是指在服务器端生成 HTML,然后将生成的 HTML 发送给客户端显示的过程。相比于传统的客户端渲染,服务端渲染可以更快速地展示页面,提供更加良好的 SEO 体验和更少的加载时间。

使用 Nuxt.js 实现服务端渲染非常简单,只需要将页面组件中的 asyncData 方法和 head 注入到服务器端生成的 HTML 中。Nuxt.js 将自动处理路由和异步数据加载,并生成服务器端渲染所需要的配置。

下面是一个使用服务端渲染的例子:

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

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

  head() {
    return {
      title: this.post.title,
      meta: [
        { hid: 'description', name: 'description', content: this.post.content }
      ]
    }
  }
}
script>

在上面的代码中,我们定义了一个名为 asyncData 的方法,用来获取服务器上的文章数据。在 asyncData 方法中,我们使用 $axios.$get 方法来获取指定文章数据,并将其返回给页面组件。

另外,我们还使用了 head 方法来指定页面的元信息,如 </code> 和 <code><meta></code> 标签。这些元信息将被注入到服务器端生成的 HTML 中,使得搜索引擎能够更好地解析和索引页面内容。</p> <p>总之,服务端渲染是 Nuxt.js 中一个非常重要的特性,可以用来加速页面渲染、提高 SEO 体验和缩短页面加载时间。Nuxt.js 提供了很多便捷的 API 来实现服务端渲染,并且支持自定义配置来满足各种需求。</p> <h2>Nuxt.js中的静态文件服务</h2> <p>在 Nuxt.js 中,静态文件是指不需要经过处理并且可以直接访问的文件,如图片、样式表、脚本文件等。在 Nuxt.js 中,静态文件可以通过 <code>static</code> 和 <code>assets</code> 目录进行管理,并且可以通过 <code>nuxt generate</code> 命令生成静态站点。</p> <p><code>static</code> 目录用于存放静态资源,如图片、字体、XML 文件等,可以通过浏览器直接访问。<code>assets</code> 目录用于存放应用程序的资源,如样式表、脚本文件、图标等。在构建过程中,<code>assets</code> 目录中的资源会被 webpack 处理,并且可以导入到项目中。</p> <blockquote> <p>下面是一个使用静态文件服务的例子:</p> </blockquote> <ol> <li> <p>在 <code>static</code> 目录下添加一个名为 <code>logo.png</code> 的图片文件。</p> </li> <li> <p>在页面组件中使用该图片:</p> </li> </ol> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/logo.png<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>My Blog Logo<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'Hello from my blog page!'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在 <code>static</code> 目录下添加了一个名为 <code>logo.png</code> 的图片文件,并在页面组件中使用该图片。图片的路径为 <code>/logo.png</code>,表示在静态文件目录下的 <code>logo.png</code> 文件。</p> <p>总之,静态文件服务是 Nuxt.js 中一个非常重要的特性,可以用来管理和分发静态资源,使得应用程序更加健壮可靠。在构建过程中,Nuxt.js 将自动处理静态文件,并生成预优化的静态站点。</p> <h2>Nuxt.js中的动态头部信息</h2> <p>在 Nuxt.js 中,动态头部信息(Dynamic Head)是指在不同页面中通过 <code>head</code> 方法动态设置页面头部信息,如页面标题、meta 信息等。通过动态头部信息,可以灵活地控制页面的元信息,提高 SEO 体验和页面展示效果。</p> <p>在页面组件中,可以通过 <code>head</code> 方法来设置头部信息,该方法会在服务器端渲染时自动注入到 HTML 中。例如,我们可以在 <code>head</code> 方法中设置页面标题和描述信息:</p> <pre><code class="prism language-vue"><template> <div> <h1>Welcome to my Blog</h1> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { message: 'Hello from my blog page!' } }, head() { return { title: 'My Blog - Home', meta: [ { hid: 'description', name: 'description', content: 'My Blog - Home Page' } ] } } } </script> <style> /* 样式代码 */ </style> </code></pre> <p>在上面的代码中,我们在 <code>head</code> 方法中设置了页面标题为 <code>My Blog - Home</code>,同时设置了 <code>description</code> 的 meta 信息为 <code>My Blog - Home Page</code>。</p> <p>除了静态设置外,还可以在 <code>head</code> 方法中使用动态数据设置头部信息,例如根据页面数据来设置页面标题和描述信息:</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{{ post.title }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ post.content }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token keyword">async</span> <span class="token function">asyncData</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> app<span class="token punctuation">,</span> params <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> post <span class="token operator">=</span> <span class="token keyword">await</span> app<span class="token punctuation">.</span>$axios<span class="token punctuation">.</span><span class="token function">$get</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">/api/posts/</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>params<span class="token punctuation">.</span>slug<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> post <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">head</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token keyword">this</span><span class="token punctuation">.</span>post<span class="token punctuation">.</span>title<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> - My Blog</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">,</span> <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token literal-property property">hid</span><span class="token operator">:</span> <span class="token string">'description'</span><span class="token punctuation">,</span> <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'description'</span><span class="token punctuation">,</span> <span class="token literal-property property">content</span><span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>post<span class="token punctuation">.</span>content <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在 <code>head</code> 方法中根据页面数据来设置页面标题和 <code>description</code> 的 meta 信息。</p> <p>总之,动态头部信息是 Nuxt.js 中一个非常重要的特性,可以用来灵活地管理页面的元信息,以提高 SEO 体验和页面展示效果。使用 Nuxt.js 的 <code>head</code> 方法可以轻松实现动态头部信息。</p> <h2>Nuxt.js中的插件</h2> <p>在 Nuxt.js 中,插件是指一个 JavaScript 文件,用来扩展应用程序的功能。插件可以用来注入第三方库、添加全局组件、定义全局指令、添加全局 mixin 等。在 Nuxt.js 中,插件可以通过 <code>~plugins</code> 目录进行管理,并在 <code>nuxt.config.js</code> 中配置。</p> <blockquote> <p>下面是一个使用插件的例子:</p> </blockquote> <p><strong>1. 在 <code>~plugins</code> 目录下创建一个名为 <code>my-plugin.js</code> 的插件文件:</strong></p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">(</span><span class="token parameter">context<span class="token punctuation">,</span> inject</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// 在 context 中注入 myPlugin 对象</span> <span class="token keyword">const</span> myPlugin <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'Hello from my plugin!'</span> <span class="token punctuation">}</span> <span class="token function">inject</span><span class="token punctuation">(</span><span class="token string">'myPlugin'</span><span class="token punctuation">,</span> myPlugin<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们导出一个函数,该函数接收 <code>context</code> 和 <code>inject</code> 两个参数。在函数中,我们定义了一个名为 <code>myPlugin</code> 的对象,并使用 <code>inject</code> 方法将其注入到应用程序中。</p> <p><strong>2. 在 <code>nuxt.config.js</code> 中配置插件:</strong></p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">'~/plugins/my-plugin.js'</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们在 <code>nuxt.config.js</code> 中的 <code>plugins</code> 属性中配置了 <code>my-plugin.js</code> 插件。</p> <p><strong>3. 在页面组件中使用插件:</strong></p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">''</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">mounted</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 使用 myPlugin 对象获取插件数据</span> <span class="token keyword">this</span><span class="token punctuation">.</span>message <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>$myPlugin<span class="token punctuation">.</span>message <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在页面组件中使用了刚刚定义的插件。在 <code>mounted</code> 钩子中,我们使用 <code>$myPlugin</code> 对象获取插件数据,并将其显示在页面中。</p> <p>总之,插件是 Nuxt.js 中一个非常重要的特性,可以用来扩展应用程序的功能,提高开发效率和代码复用性。在 Nuxt.js 中使用插件非常简单,只需要将插件文件放置到 <code>~plugins</code> 目录中,并在 <code>nuxt.config.js</code> 中进行配置。</p> <h2>Nuxt.js中的过滤器</h2> <p>在 Nuxt.js 中,过滤器是一种<strong>用于格式化文本、日期、数字等数据的函数</strong>。过滤器可以用于模板中的文本绑定、计算属性、组件方法等。在 Nuxt.js 中,过滤器可以通过 <code>filters</code> 属性进行全局注册,也可以在组件内部进行局部注册。</p> <blockquote> <p>下面是一个使用过滤器的例子:</p> </blockquote> <p><strong>1. 在 <code>filters</code> 目录下创建一个名为 <code>capitalize.js</code> 的过滤器文件:</strong></p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">value</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>value<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token string">''</span> value <span class="token operator">=</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> value<span class="token punctuation">.</span><span class="token function">charAt</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们定义了一个名为 <code>capitalize</code> 的过滤器函数,用于将首字母转换为大写。在函数中,我们首先判断传入的值是否为空,然后将它转换成字符串,最后将第一个字符转换成大写字母。</p> <p><strong>2. 在模板中使用过滤器:</strong></p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message | capitalize }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在模板中使用了 <code>capitalize</code> 过滤器,该过滤器将字符串的首字母转换成大写,从而显示为 <code>Hello from my blog!</code>。</p> <blockquote> <p>除了全局注册外,我们还可以在组件内部进行局部注册。例如:</p> </blockquote> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message | capitalize }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">filters</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function">capitalize</span><span class="token punctuation">(</span><span class="token parameter">value</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>value<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token string">''</span> value <span class="token operator">=</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> value<span class="token punctuation">.</span><span class="token function">charAt</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在组件内部通过 <code>filters</code> 属性进行局部注册,该过滤器与全局注册的 <code>capitalize</code> 过滤器作用相同。</p> <p>总之,过滤器是 Nuxt.js 中一个非常有用的特性,可以用于格式化文本、日期、数字等数据。在 Nuxt.js 中使用过滤器非常简单,只需要定义过滤器函数,并通过全局或局部注册即可。</p> <h2>Nuxt.js中的中间件</h2> <p>在 Nuxt.js 中,中间件是指在路由导航之前或之后执行的函数。中间件可以用于验证用户身份、路由拦截、日志记录等场景。在 Nuxt.js 中,中间件可以通过 <code>middleware</code> 目录进行管理,并在页面组件或 <code>nuxt.config.js</code> 中配置。</p> <blockquote> <p>下面是一个使用中间件的例子:</p> </blockquote> <p><strong>1. 在 <code>middleware</code> 目录下创建一个名为 <code>auth.js</code> 的中间件文件:</strong></p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> store<span class="token punctuation">,</span> route<span class="token punctuation">,</span> redirect <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 如果用户未登录,则进行重定向</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>store<span class="token punctuation">.</span>state<span class="token punctuation">.</span>auth<span class="token punctuation">.</span>loggedIn<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token string">'/login'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们定义了一个名为 <code>auth</code> 的中间件函数,用于判断用户是否登录。如果用户未登录,则重定向到 <code>/login</code> 页面。</p> <p><strong>2. 在页面组件中使用中间件:</strong></p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">middleware</span><span class="token operator">:</span> <span class="token string">'auth'</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们在页面组件中使用了中间件 <code>auth</code>,该中间件用于判断用户是否登录。</p> <p>除了页面组件外,我们还可以在 <code>nuxt.config.js</code> 中进行全局配置,该配置将应用于所有页面组件:</p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token literal-property property">middleware</span><span class="token operator">:</span> <span class="token string">'auth'</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的配置中,我们将 <code>middleware</code> 属性设置为 <code>auth</code>,该中间件将应用于所有页面组件。</p> <p>总之,中间件是 Nuxt.js 中一个非常有用的特性,可以用于实现路由验证、拦截、日志记录等功能。在 Nuxt.js 中使用中间件非常简单,只需要定义中间件函数,并在页面组件或 <code>nuxt.config.js</code> 中进行配置即可。</p> <h1>IV. Nuxt.js集成</h1> <h2>Nuxt.js + GraphQL</h2> <p><code>Nuxt.js</code> 与 <code>GraphQL</code> 可以通过许多插件和库配合使用,以便在应用程序中使用 GraphQL API。</p> <blockquote> <p>下面是一些使用 Nuxt.js 和 GraphQL 的步骤:</p> </blockquote> <p><strong>1. 安装依赖</strong></p> <p>需要安装以下依赖包:</p> <ul> <li><code>@nuxtjs/apollo</code>:管理 Apollo GraphQL 客户端的 Nuxt.js 插件</li> <li><code>graphql</code>:用于执行 GraphQL 查询和操作</li> <li><code>apollo-cache-inmemory</code>:Apollo 客户端使用的缓存系统</li> </ul> <p>可以在命令行中使用以下命令安装所需依赖包:</p> <pre><code class="prism language-sh">npm install @nuxtjs/apollo graphql apollo-cache-inmemory </code></pre> <p><strong>2. 配置apollo模块</strong></p> <p>在 <code>nuxt.config.js</code> 中添加以下配置:</p> <pre><code class="prism language-js"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token literal-property property">modules</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">'@nuxtjs/apollo'</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token literal-property property">apollo</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">clientConfigs</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token keyword">default</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">httpEndpoint</span><span class="token operator">:</span> <span class="token string">'https://api.example.com/graphql'</span> <span class="token comment">// 替换为你的 GraphQL API URL</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们首先添加了 <code>@nuxtjs/apollo</code> 模块,并在 <code>clientConfigs</code> 中配置了 GraphQL API 的 URL。</p> <p><strong>3. 创建 GraphQL 查询</strong></p> <p>使用 GraphQL 查询需要创建 <code>.gql</code> 或 <code>.graphql</code> 文件,然后在组件中执行该查询。</p> <p>以使用 GitHub 的 GraphQL API 为例,创建一个名为 <code>getUser.gql</code> 的 GraphQL 查询:</p> <pre><code class="prism language-graphql">query ($login: String!) { user(login: $login) { name email avatarUrl repositories(first: 5) { nodes { name description } } } } </code></pre> <p>在上面的代码中,我们定义了一个名为 <code>getUser</code> 的查询,该查询需要一个名为 <code>login</code> 的参数,然后返回一个用户对象,包括该用户的姓名、电子邮件、头像 URL 以及前五个存储库的名称和描述。</p> <p><strong>4. 执行 GraphQL 查询</strong></p> <p>在组件内部,我们可以使用 <code>apollo-query</code> 组件来执行 GraphQL 查询,并将查询结果保存在变量中:</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{{ user.name }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">:href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token punctuation">'</span>mailto:<span class="token punctuation">'</span> + user.email<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>{{ user.email }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>user.avatarUrl<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>User Avatar<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h2</span><span class="token punctuation">></span></span>Repositories<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h2</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span> <span class="token attr-name">v-for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>repo in user.repositories.nodes<span class="token punctuation">"</span></span> <span class="token attr-name">:key</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>repo.name<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h3</span><span class="token punctuation">></span></span>{{ repo.name }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h3</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ repo.description }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> getUserQuery <span class="token keyword">from</span> <span class="token string">'~/queries/getUser.gql'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">login</span><span class="token operator">:</span> <span class="token string">'octocat'</span><span class="token punctuation">,</span> <span class="token comment">// 替换为你要查询的 GitHub 用户名</span> <span class="token literal-property property">user</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">apollo</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">user</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">query</span><span class="token operator">:</span> getUserQuery<span class="token punctuation">,</span> <span class="token function">variables</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">login</span><span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>login <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">update</span><span class="token punctuation">(</span><span class="token parameter">data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> data<span class="token punctuation">.</span>user <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们首先导入 <code>getUser.gql</code> 文件,并在 <code>data</code> 中定义了登录名 <code>login</code> 和用户对象 <code>user</code>。接下来,在 <code>apollo</code> 对象中配置了 <code>user</code> 查询,需要 <code>getUserQuery</code> 查询和 <code>login</code> 参数。在查询结果返回后,我们使用 <code>update</code> 函数将该用户对象返回并保存在 <code>user</code> 中。</p> <p>这样,我们就完成了在 Nuxt.js 应用中使用 GraphQL 查询的操作,你可以通过 <code>user</code> 对象来访问所需的数据。</p> <h2>Nuxt.js + Firebase</h2> <p>Nuxt.js 可以很方便地与 <code>Firebase</code> 集成,<code>Firebase</code> 是一款由 Google 提供的后端服务平台,包括<strong>后端数据库、身份验证、云存储</strong>等功能。</p> <blockquote> <p>下面是一些使用 Nuxt.js 和 Firebase 的步骤:</p> </blockquote> <p><strong>1. 创建 Firebase 项目</strong></p> <p>在 Firebase 控制台中创建一个新项目,并启用所需的 Firebase 服务,例如 Firebase Authentication、Firebase Cloud Firestore 等。</p> <p><strong>2. 安装 Firebase SDK</strong></p> <p>安装 Firebase 的 JavaScript SDK:</p> <pre><code>npm install firebase </code></pre> <p><strong>3. 配置 Firebase SDK</strong></p> <p>在 Nuxt.js 应用程序中,可以在 <code>nuxt.config.js</code> 文件中设置 Firebase 的配置信息,如下所示:</p> <pre><code class="prism language-js"><span class="token keyword">import</span> firebase <span class="token keyword">from</span> <span class="token string">'firebase/app'</span> <span class="token keyword">import</span> <span class="token string">'firebase/auth'</span> <span class="token keyword">import</span> <span class="token string">'firebase/firestore'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token literal-property property">head</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">script</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token literal-property property">src</span><span class="token operator">:</span> <span class="token string">'https://www.gstatic.com/firebasejs/8.2.2/firebase-app.js'</span><span class="token punctuation">,</span> <span class="token literal-property property">defer</span><span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">buildModules</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span><span class="token string">'@nuxtjs/firebase'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">config</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">apiKey</span><span class="token operator">:</span> <span class="token string">'YOUR_API_KEY'</span><span class="token punctuation">,</span> <span class="token literal-property property">authDomain</span><span class="token operator">:</span> <span class="token string">'YOUR_AUTH_DOMAIN'</span><span class="token punctuation">,</span> <span class="token literal-property property">projectId</span><span class="token operator">:</span> <span class="token string">'YOUR_PROJECT_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">storageBucket</span><span class="token operator">:</span> <span class="token string">'YOUR_STORAGE_BUCKET'</span><span class="token punctuation">,</span> <span class="token literal-property property">messagingSenderId</span><span class="token operator">:</span> <span class="token string">'YOUR_MESSAGING_SENDER_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">appId</span><span class="token operator">:</span> <span class="token string">'YOUR_APP_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">measurementId</span><span class="token operator">:</span> <span class="token string">'YOUR_MEASUREMENT_ID'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">services</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">auth</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token literal-property property">firestore</span><span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token literal-property property">firebase</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">config</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">apiKey</span><span class="token operator">:</span> <span class="token string">'YOUR_API_KEY'</span><span class="token punctuation">,</span> <span class="token literal-property property">authDomain</span><span class="token operator">:</span> <span class="token string">'YOUR_AUTH_DOMAIN'</span><span class="token punctuation">,</span> <span class="token literal-property property">projectId</span><span class="token operator">:</span> <span class="token string">'YOUR_PROJECT_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">storageBucket</span><span class="token operator">:</span> <span class="token string">'YOUR_STORAGE_BUCKET'</span><span class="token punctuation">,</span> <span class="token literal-property property">messagingSenderId</span><span class="token operator">:</span> <span class="token string">'YOUR_MESSAGING_SENDER_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">appId</span><span class="token operator">:</span> <span class="token string">'YOUR_APP_ID'</span><span class="token punctuation">,</span> <span class="token literal-property property">measurementId</span><span class="token operator">:</span> <span class="token string">'YOUR_MEASUREMENT_ID'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">services</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">auth</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token literal-property property">firestore</span><span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>在上面的代码中,我们首先导入了 Firebase SDK,并将其添加到 <code>nuxt.config.js</code> 中。然后,在 <code>buildModules</code> 和 <code>firebase</code> 中配置 Firebase 的信息和所需的服务。</p> <p><strong>4. 在页面组件中使用 Firebase</strong></p> <p>在页面组件中,我们可以通过 <code>this.$firebase</code> 访问 Firebase 对象,并调用各种 Firebase 服务。例如:</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>button</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>!loggedIn<span class="token punctuation">"</span></span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>login<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Log in<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>button</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>loggedIn<span class="token punctuation">"</span></span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>logout<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Log out<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> firebase <span class="token keyword">from</span> <span class="token string">'~/plugins/firebase'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span><span class="token punctuation">,</span> <span class="token literal-property property">loggedIn</span><span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">methods</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function">login</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> firebase<span class="token punctuation">.</span><span class="token function">auth</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">signInWithEmailAndPassword</span><span class="token punctuation">(</span><span class="token string">'email@example.com'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>loggedIn <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">error</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>error<span class="token punctuation">.</span>message<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">logout</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> firebase<span class="token punctuation">.</span><span class="token function">auth</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">signOut</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>loggedIn <span class="token operator">=</span> <span class="token boolean">false</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">error</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>error<span class="token punctuation">.</span>message<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token function">asyncData</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> $fireStore <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> snapshot <span class="token operator">=</span> <span class="token keyword">await</span> $fireStore<span class="token punctuation">.</span><span class="token function">collection</span><span class="token punctuation">(</span><span class="token string">'posts'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span> posts <span class="token operator">=</span> snapshot<span class="token punctuation">.</span>docs<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">doc</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">id</span><span class="token operator">:</span> doc<span class="token punctuation">.</span>id<span class="token punctuation">,</span> <span class="token operator">...</span>doc<span class="token punctuation">.</span><span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> posts <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">posts</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们首先导入 <code>firebase</code> 并实现了 <code>login</code> 和 <code>logout</code> 方法。我们还可以使用 <code>$fireStore</code> 访问 Cloud Firestore,以获取 <code>posts</code> 数据。在获取数据时,我们使用 <code>asyncData</code> 方法来保证页面在获取数据后才进行渲染。</p> <p>这样,我们就完成了在 Nuxt.js 应用中使用 Firebase 的操作,可以使用 Firebase 提供的各种服务,如身份验证、数据库、存储等功能。</p> <h2>Nuxt.js + Strapi</h2> <p>Nuxt.js 可以很方便地与 Strapi 集成,Strapi 是一款开源的 Node.js 后端框架,可以创建 API 和应用程序并提供后端管理界面。下面是一些使用 Nuxt.js 和 Strapi 的步骤:</p> <p><strong>1. 创建 Strapi 应用程序</strong></p> <p>使用 Strapi CLI 创建一个新的 Strapi 应用程序:</p> <pre><code class="prism language-sh">npx create-strapi-app my-app </code></pre> <p>在创建应用程序时,可以选择适当的数据库类型,例如 SQLite、MySQL、PostgreSQL 等。</p> <p>启动 Strapi 应用程序:</p> <pre><code class="prism language-sh">cd my-app npm run develop </code></pre> <p><strong>2. 创建 API</strong></p> <p>在 Strapi 应用程序中,可以使用 Strapi 的界面创建和管理 API。创建一个新的 API 需要以下步骤:</p> <ul> <li>创建一种数据类型(ContentType)</li> <li>添加字段(Field)</li> <li>发布数据(Entry)</li> </ul> <p>例如,我们创建一个 <code>Post</code> 类型的数据,该类型有 <code>title</code>、<code>content</code> 和 <code>author</code> 三个字段。</p> <p><strong>3. 安装 <code>strapi-sdk-javascript</code></strong></p> <pre><code class="prism language-sh">npm install strapi-sdk-javascript </code></pre> <p><strong>4. 在 Nuxt.js 中使用 Strapi API</strong></p> <p>在 Nuxt.js 应用程序中,可以使用 <code>strapi-sdk-javascript</code> 访问 Strapi API。例如,在 Nuxt.js 中获取 <code>Post</code> 数据的代码如下:</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span> <span class="token attr-name">v-for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>post in posts<span class="token punctuation">"</span></span> <span class="token attr-name">:key</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>post.id<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h2</span><span class="token punctuation">></span></span>{{ post.title }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h2</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ post.content }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ post.author.username }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> Strapi <span class="token keyword">from</span> <span class="token string">'strapi-sdk-javascript'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span><span class="token punctuation">,</span> <span class="token literal-property property">posts</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token function">asyncData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> strapi <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Strapi</span><span class="token punctuation">(</span><span class="token string">'http://localhost:1337'</span><span class="token punctuation">)</span> <span class="token keyword">const</span> response <span class="token operator">=</span> <span class="token keyword">await</span> strapi<span class="token punctuation">.</span><span class="token function">getEntries</span><span class="token punctuation">(</span><span class="token string">'posts'</span><span class="token punctuation">)</span> <span class="token keyword">const</span> posts <span class="token operator">=</span> response<span class="token punctuation">.</span>data <span class="token keyword">return</span> <span class="token punctuation">{</span> posts <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">posts</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们首先导入 <code>strapi-sdk-javascript</code>,并使用 <code>asyncData</code> 方法获取 <code>posts</code> 数据。在获取数据时,我们使用了 Strapi 提供的 <code>getEntries</code> 方法来获取 <code>posts</code> 数据。然后,我们将获取的数据存储在 <code>posts</code> 变量中。</p> <p>这样,我们就完成了在 Nuxt.js 应用中使用 Strapi API 的操作,包括创建 Strapi 应用程序、创建 API 和使用 <code>strapi-sdk-javascript</code> 访问 Strapi API。这样我们就可以通过 Strapi 来管理我们的内容和数据,并通过 Nuxt.js 应用程序来渲染这些数据。</p> <h2>Nuxt.js + WordPress</h2> <p>Nuxt.js 可以很方便地与 WordPress 集成,并使用 WordPress REST API 来获取 WordPress 站点的数据。下面是一些使用 Nuxt.js 和 WordPress 的步骤:</p> <p><strong>1. 配置 WordPress REST API</strong></p> <p>在 WordPress 中启用 REST API,并验证 REST API 是否工作正常。首先,在 WordPress 管理界面中登录,并导航到“设置” > “固定链接”页面。选择“帖子名称”或其他任何选项,然后保存更改。这将确保我们的 WordPress 站点已启用自定义链接结构。接下来,导航到 <code>https://your-wordpress-site.com/wp-json/wp/v2/posts</code>,可以看到 WordPress 的 REST API 返回了所有文章的 JSON 数据。如果出现“请求错误”或其他错误,则需要检查 WordPress 中是否启用了 REST API。</p> <p><strong>2. 安装 <code>axios</code></strong></p> <p>我们需要使用 <code>axios</code> 来访问 WordPress 的 REST API:</p> <pre><code class="prism language-sh">npm install axios </code></pre> <p><strong>3. 在 Nuxt.js 中使用 WordPress 数据</strong></p> <p>在 Nuxt.js 应用程序中,可以使用 <code>axios</code> 访问 WordPress 的 REST API。</p> <p>例如,在 Nuxt.js 应用程序中获取文章数据的代码如下:</p> <pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Welcome to my Blog<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>{{ message }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span> <span class="token attr-name">v-for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>post in posts<span class="token punctuation">"</span></span> <span class="token attr-name">:key</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>post.id<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h2</span><span class="token punctuation">></span></span>{{ post.title.rendered }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h2</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span> <span class="token attr-name">v-html</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>post.content.rendered<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> axios <span class="token keyword">from</span> <span class="token string">'axios'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">'hello from my blog!'</span><span class="token punctuation">,</span> <span class="token literal-property property">posts</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token function">created</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> response <span class="token operator">=</span> <span class="token keyword">await</span> axios<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'https://your-wordpress-site.com/wp-json/wp/v2/posts'</span><span class="token punctuation">)</span> <span class="token keyword">const</span> posts <span class="token operator">=</span> response<span class="token punctuation">.</span>data <span class="token keyword">this</span><span class="token punctuation">.</span>posts <span class="token operator">=</span> posts <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token comment">/* 样式代码 */</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> </code></pre> <p>在上面的代码中,我们首先导入 <code>axios</code>,并在 <code>created</code> 生命周期中使用 <code>axios</code> 发送请求并获取数据。在获取数据后,我们将文章数据存储在 <code>posts</code> 变量中。在模板中,我们使用 <code>v-for</code> 循环渲染了所有文章数据,并使用 Vue.js 的 <code>v-html</code> 指令将文章内容进行 HTML 渲染。</p> <p>这样,我们就完成了在 Nuxt.js 应用中使用 <code>WordPress</code> 数据的操作,可以使用 REST API 获取 WordPress 中的文章、页面、评论、分类、标签等内容。您可以根据需要使用使用 <code>axios</code> 和其他 Vue.js 插件来处理 <code>WordPress</code> 数据和内容。</p> <h1>V. 总结</h1> <h2>Nuxt.js的优点和缺点</h2> <p>Nuxt.js 是一个基于 Vue.js 的应用程序框架,它提供了许多内置的功能和工具来让开发者能快速地构建一个完整的 SSR 应用程序。下面是 Nuxt.js 的优点和缺点:</p> <h3>优点</h3> <ol> <li> <p><strong>基于 Vue.js</strong>:<code>Nuxt.js</code> 基于 <code>Vue.js</code> 框架,提供了许多内置的 <code>Vue.js</code> 功能和工具,这意味着开发者可以在 <code>Nuxt.js</code> 中使用所有 <code>Vue.js</code> 组件和指令。</p> </li> <li> <p><strong>强大的 SSR</strong>:<code>Nuxt.js</code> 提供了强大且易于使用的<strong>服务器端渲染(SSR)功能</strong>,使<strong>搜索引擎</strong>可以轻松地访问网站,并提高了网站的性能和速度。</p> </li> <li> <p><strong>自动生成路由</strong>:<code>Nuxt.js</code> 提供了自动生成路由的功能,基于文件夹和文件名生成路由。这样可以让开发者专注于页面内容,而不用处理路由相关的问题。</p> </li> <li> <p><strong>内置模块</strong>:<code>Nuxt.js</code> 提供了许多内置模块,例如 <code>Axios、PWA、Vue Meta</code> 等,开发者可以快速使用这些模块,并针对自己的需求进行配置和调整。</p> </li> <li> <p><strong>极其灵活</strong>: <code>Nuxt.js</code> 提供了很多配置选项,基本上所有的东西都可以自定义和扩展。开发者可以根据自己的需要灵活地修改和扩展该框架。</p> </li> </ol> <h3>缺点</h3> <ol> <li> <p><strong>学习曲线较陡峭</strong>:因为 Nuxt.js 有大量的内置功能和模块,所以初学者可能需要一定的时间来掌握它的工作方式和使用方法。</p> </li> <li> <p><strong>约定大于配置</strong>:Nuxt.js 框架提供了许多默认设置和规则,如果需要修改这些默认值或加入其他的特性,需要遵循特定的约定和规则。</p> </li> <li> <p><strong>少数人使用</strong>:Nuxt.js 是一个比较新的框架,相对于其他流行的框架,使用人数还比较少,社区支持可能相对较弱。</p> </li> <li> <p><strong>不适用于所有项目</strong>:Nuxt.js 是一个针对大型、复杂的网站和应用程序的 SSR 框架。对于小型项目或静态页面生成,使用 Nuxt.js 可能会影响性能和资源的使用。</p> </li> </ol> <p>综上所述,<code>Nuxt.js</code> 是<strong>基于 Vue.js 的一个优秀 SSR 应用程序框架</strong>,提供了许多强大的功能和工具。该框架适用于大型、复杂的网站和应用程序,但是对于小型项目或静态页面生成,使用 Nuxt.js 可能会增加开销和时间成本。开发团</p> <h2>Nuxt.js适合哪些应用场景</h2> <p>Nuxt.js 是一个<strong>基于 Vue.js 的应用程序框架</strong>,专注于构建 <code>SSR</code>(服务器端渲染) Web 应用程序。因此,相对于传统的 SPA(单页应用程序)框架,<code>Nuxt.js</code> 更加适用于以下场景:</p> <ol> <li> <p><strong>大型 Web 应用程序</strong>:对于需要在多个页面或视图中共享数据和状态的大型应用程序,使用 <code>Nuxt.js</code> 可以提高应用程序的渲染速度和性能,并为搜索引擎优化做好准备。</p> </li> <li> <p><strong>SEO 优化要求较高的应用程序</strong>:因为搜索引擎爬虫不能执行 <code>JavaScript</code>,所以对于需要被搜索引擎爬虫处理的 Web 应用程序,使用 Nuxt.js 会更加有利于网页的搜索性能优化。</p> </li> <li> <p><strong>快速原型开发</strong>:对于需要快速创建原型或小型 Web 应用程序的开发者,使用 Nuxt.js 可以快速启动应用程序,并且可以利用其自动生成路由和页面的功能快速构建应用程序。</p> </li> <li> <p><strong>电子商务网站或博客</strong>:对于需要展示多篇文章或商品的 Web 应用程序,可以通过 Nuxt.js 更加容易地构建出一个具有服务器端渲染、良好 <code>SEO</code> 和页面预加载的电子商务网站或博客网站。</p> </li> </ol> <p>综上所述,Nuxt.js 适合构建适用于大型 Web 应用程序,需要良好的 SEO 优化以及需要快速原型开发的应用程序。如果需要开发优秀的电子商务或博客网站,Nuxt.js 也是非常值得使用的。</p> <h2>Nuxt.js的未来展望</h2> <p>作为一个基于 Vue.js 框架的 SSR 应用程序开发框架,Nuxt.js 在不断发展和进步。</p> <blockquote> <p>以下是 Nuxt.js 的未来展望:</p> </blockquote> <ol> <li> <p><strong>持续发展和更新</strong>:<code>Nuxt.js</code> 团队致力于不断维护和更新框架,并提供新的特性和功能。<code>Nuxt.js</code> 的更新和迭代速度很快,这使得开发者可以更好地应对新技术和需求。</p> </li> <li> <p><strong>更好的 SSR 性能</strong>:针对未来的版本,<code>Nuxt.js</code> 团队致力于提供更好性能的 SSR。这让开发者能够快速地构建出良好性能的 SSR 应用程序,提高用户体验。</p> </li> <li> <p><strong>更好的文档和实例</strong>:<code>Nuxt.js</code> 团队正在努力提供更好的文档和实例,方便开发者更好地了解和使用 <code>Nuxt.js</code> 框架。这让开发者更快地上手 <code>Nuxt.js</code>,更好地解决问题。</p> </li> <li> <p><strong>更多的社区支持</strong>:对于一个开源项目而言,社区支持是不可或缺的。<code>Nuxt.js</code> 团队将继续努力扩大社区,并提供更好的支持和帮助,让更多的开发者共同推动 <code>Nuxt.js</code> 的发展。</p> </li> </ol> <p>综上所述,<code>Nuxt.js</code> 的未来展望是持续发展和进步,并提供更好的 <code>SSR</code> 性能、更好的文档和实例以及更多的社区支持。<code>Nuxt.js</code> 团队致力于为开发者提供更好的开发体验,并为 Web 应用程序开发提供更好的解决方案。</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1668866821895315456"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(vue.js,javascript,前端)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835512920797179904.htm" title="element实现动态路由+面包屑" target="_blank">element实现动态路由+面包屑</a> <span class="text-muted">软件技术NINI</span> <a class="tag" taget="_blank" href="/search/vue%E6%A1%88%E4%BE%8B/1.htm">vue案例</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi</div> </li> <li><a href="/article/1835509897106649088.htm" title="Long类型前后端数据不一致" target="_blank">Long类型前后端数据不一致</a> <span class="text-muted">igotyback</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问</div> </li> <li><a href="/article/1835498925755297792.htm" title="DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理" target="_blank">DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理</a> <span class="text-muted">STU学生网页设计</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/%E6%9C%9F%E6%9C%AB%E7%BD%91%E9%A1%B5%E4%BD%9C%E4%B8%9A/1.htm">期末网页作业</a><a class="tag" taget="_blank" href="/search/html%E9%9D%99%E6%80%81%E7%BD%91%E9%A1%B5/1.htm">html静态网页</a><a class="tag" taget="_blank" href="/search/html5%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">html5期末大作业</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/web%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web大作业</a> <div>️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程</div> </li> <li><a href="/article/1835497792265613312.htm" title="【加密社】Solidity 中的事件机制及其应用" target="_blank">【加密社】Solidity 中的事件机制及其应用</a> <span class="text-muted">加密社</span> <a class="tag" taget="_blank" href="/search/%E9%97%B2%E4%BE%83/1.htm">闲侃</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a> <div>加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件</div> </li> <li><a href="/article/1835496149843275776.htm" title="关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript" target="_blank">关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript</a> <span class="text-muted">二挡起步</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/%E9%A3%8E%E6%99%AF/1.htm">风景</a> <div>⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip</div> </li> <li><a href="/article/1835496148601761792.htm" title="HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动" target="_blank">HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动</a> <span class="text-muted">二挡起步</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/web%E8%AE%BE%E8%AE%A1%E7%BD%91%E9%A1%B5%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%BE%E8%AE%A1/1.htm">web设计网页规划与设计</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/dreamweaver/1.htm">dreamweaver</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线</div> </li> <li><a href="/article/1835492740536823808.htm" title="node.js学习" target="_blank">node.js学习</a> <span class="text-muted">小猿L</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a> <div>node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行</div> </li> <li><a href="/article/1835448238103162880.htm" title="springboot+vue项目实战一-创建SpringBoot简单项目" target="_blank">springboot+vue项目实战一-创建SpringBoot简单项目</a> <span class="text-muted">苹果酱0567</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一</div> </li> <li><a href="/article/1835448239864770560.htm" title="JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)" target="_blank">JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)</a> <span class="text-muted">跳房子的前端</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95/1.htm">前端面试</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>在JavaScript中,深拷贝(DeepCopy)和浅拷贝(ShallowCopy)是用于复制对象或数组的两种不同方法。了解它们的区别和应用场景对于避免潜在的bugs和高效地处理数据非常重要。以下是对深拷贝和浅拷贝的详细解释,包括它们的概念、用途、优缺点以及实现方式。1.浅拷贝(ShallowCopy)概念定义:浅拷贝是指创建一个新的对象或数组,其中包含了原对象或数组的基本数据类型的值和对引用数</div> </li> <li><a href="/article/1835437775344726016.htm" title="博客网站制作教程" target="_blank">博客网站制作教程</a> <span class="text-muted">2401_85194651</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java</div> </li> <li><a href="/article/1835428948339683328.htm" title="JavaScript `Map` 和 `WeakMap`详细解释" target="_blank">JavaScript `Map` 和 `WeakMap`详细解释</a> <span class="text-muted">跳房子的前端</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%8E%9F%E7%94%9F%E6%96%B9%E6%B3%95/1.htm">原生方法</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在JavaScript中,Map和WeakMap都是用于存储键值对的数据结构,但它们有一些关键的不同之处。MapMap是一种可以存储任意类型的键值对的集合。它保持了键值对的插入顺序,并且可以通过键快速查找对应的值。Map提供了一些非常有用的方法和属性来操作这些数据对:set(key,value):将一个键值对添加到Map中。如果键已经存在,则更新其对应的值。get(key):获取指定键的值。如果键</div> </li> <li><a href="/article/1835428317084348416.htm" title="最简单将静态网页挂载到服务器上(不用nginx)" target="_blank">最简单将静态网页挂载到服务器上(不用nginx)</a> <span class="text-muted">全能全知者</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>最简单将静态网页挂载到服务器上(不用nginx)如果随便弄个静态网页挂在服务器都要用nignx就太麻烦了,所以直接使用Apache来搭建一些简单前端静态网页会相对方便很多检查Web服务器服务状态:sudosystemctlstatushttpd#ApacheWeb服务器如果发现没有安装web服务器:安装Apache:sudoyuminstallhttpd启动Apache:sudosystemctl</div> </li> <li><a href="/article/1835427057752961024.htm" title="补充元象二面" target="_blank">补充元象二面</a> <span class="text-muted">Redstone Monstrosity</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>1.请尽可能详细地说明,防抖和节流的区别,应用场景?你的回答中不要写出示例代码。防抖(Debounce)和节流(Throttle)是两种常用的前端性能优化技术,它们的主要区别在于如何处理高频事件的触发。以下是防抖和节流的区别和应用场景的详细说明:防抖和节流的定义防抖:在一段时间内,多次执行变为只执行最后一次。防抖的原理是,当事件被触发后,设置一个延迟定时器。如果在这个延迟时间内事件再次被触发,则重</div> </li> <li><a href="/article/1835420753252675584.htm" title="微信小程序开发注意事项" target="_blank">微信小程序开发注意事项</a> <span class="text-muted">jun778895</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a> <div>微信小程序开发是一个融合了前端开发、用户体验设计、后端服务(可选)以及微信小程序平台特性的综合性项目。这里,我将详细介绍一个典型的小程序开发项目的全过程,包括项目规划、设计、开发、测试及部署上线等各个环节,并尽量使内容达到或超过2000字的要求。一、项目规划1.1项目背景与目标假设我们要开发一个名为“智慧校园助手”的微信小程序,旨在为学生提供一站式校园生活服务,包括课程表查询、图书馆座位预约、食堂</div> </li> <li><a href="/article/1835419870070665216.htm" title="切换淘宝最新npm镜像源是" target="_blank">切换淘宝最新npm镜像源是</a> <span class="text-muted">hai40587</span> <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>切换淘宝最新npm镜像源是一个相对简单的过程,但首先需要明确当前淘宝npm镜像源的状态和最新的镜像地址。由于网络环境和服务更新,镜像源的具体地址可能会发生变化,因此,我将基于当前可获取的信息,提供一个通用的切换步骤,并附上最新的镜像地址(截至回答时)。一、了解npm镜像源npm(NodePackageManager)是JavaScript的包管理器,用于安装、更新和管理项目依赖。由于npm官方仓库</div> </li> <li><a href="/article/1835411044768509952.htm" title="字节二面" target="_blank">字节二面</a> <span class="text-muted">Redstone Monstrosity</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>1.假设你是正在面试前端开发工程师的候选人,面试官让你详细说出你上一段实习过程的收获和感悟。在上一段实习过程中,我获得了宝贵的实践经验和深刻的行业洞察,以下是我的主要收获和感悟:一、专业技能提升框架应用熟练度:通过实际项目,我深入掌握了React、Vue等前端框架的使用,不仅提升了编码效率,还学会了如何根据项目需求选择合适的框架。问题解决能力:在实习期间,我遇到了许多预料之外的技术难题。通过查阅文</div> </li> <li><a href="/article/1835398064727224320.htm" title="前端代码上传文件" target="_blank">前端代码上传文件</a> <span class="text-muted">余生逆风飞翔</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>点击上传文件import{ElNotification}from'element-plus'import{API_CONFIG}from'../config/index.js'import{UploadFilled}from'@element-plus/icons-vue'import{reactive}from'vue'import{BASE_URL}from'../config/index'i</div> </li> <li><a href="/article/1835385458356482048.htm" title="uniapp实现动态标记效果详细步骤【前端开发】" target="_blank">uniapp实现动态标记效果详细步骤【前端开发】</a> <span class="text-muted">2401_85123349</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>第二个点在于实现将已经被用户标记的内容在下一次获取后刷新它的状态为已标记。这是什么意思呢?比如说上面gif图中的这些人物对象,有一些已被该用户添加为关心,那么当用户下一次进入该页面时,这些已经被添加关心的对象需要以“红心”状态显现出来。这个点的难度还不算大,只需要在每一次获取后端的内容后对标记对象进行状态更新即可。II.动态标记效果实现思路和步骤首先,整体的思路是利用动态类名对不同的元素进行选择。</div> </li> <li><a href="/article/1835383919906746368.htm" title="高性能javascript--算法和流程控制" target="_blank">高性能javascript--算法和流程控制</a> <span class="text-muted">海淀萌狗</span> <div>-for,while和do-while性能相当-避免使用for-in循环,==除非遍历一个属性量未知的对象==es5:for-in遍历的对象便不局限于数组,还可以遍历对象。原因:for-in每次迭代操作会同时搜索实例或者原型属性,for-in循环的每次迭代都会产生更多开销,因此要比其他循环类型慢,一般速度为其他类型循环的1/7。因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用for-i</div> </li> <li><a href="/article/1835373236217540608.htm" title="360前端星计划-动画可以这么玩" target="_blank">360前端星计划-动画可以这么玩</a> <span class="text-muted">马小蜗</span> <div>动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能</div> </li> <li><a href="/article/1835368019430305792.htm" title="Vue + Express实现一个表单提交" target="_blank">Vue + Express实现一个表单提交</a> <span class="text-muted">九旬大爷的梦</span> <div>最近在折腾一个cms系统,用的vue+express,但是就一个表单提交就弄了好久,记录一下。环境:Node10+前端:Vue服务端:Express依赖包:vueexpressaxiosexpress-formidableelement-ui(可选)前言:axiosget请求参数是:paramsaxiospost请求参数是:dataexpressget接受参数是req.queryexpresspo</div> </li> <li><a href="/article/1835360244646113280.htm" title="JavaScript中秋快乐!" target="_blank">JavaScript中秋快乐!</a> <span class="text-muted">Q_w7742</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>我们来实现一个简单的祝福网页~主要的难度在于使用canvas绘图当点击canvas时候,跳出“中秋节快乐”字样,需要注册鼠标单击事件和计时器。首先定义主要函数:初始化当点击canvas之后转到onCanvasClick函数,绘图生成灯笼。functiononCanvasClick(){//事件处理函数context.clearRect(0,0,canvas1.width,canvas1.heigh</div> </li> <li><a href="/article/1835359727924637696.htm" title="Nginx从入门到实践(三)" target="_blank">Nginx从入门到实践(三)</a> <span class="text-muted">听你讲故事啊</span> <div>动静分离动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。rewrite规则Rewrite规则常见正则表达式Rewrite主要的功能就是实现URL的重写,Ngin</div> </li> <li><a href="/article/1835354700392787968.htm" title="Nginx的使用场景:构建高效、可扩展的Web架构" target="_blank">Nginx的使用场景:构建高效、可扩展的Web架构</a> <span class="text-muted">张某布响丸辣</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>Nginx,作为当今最流行的Web服务器和反向代理软件之一,凭借其高性能、稳定性和灵活性,在众多Web项目中扮演着核心角色。无论是个人博客、中小型网站,还是大型企业级应用,Nginx都能提供强大的支持。本文将探讨Nginx的几个主要使用场景,帮助读者理解如何在实际项目中充分利用Nginx的优势。1.静态文件服务对于包含大量静态文件(如HTML、CSS、JavaScript、图片等)的网站,Ngin</div> </li> <li><a href="/article/1835354447627251712.htm" title="前端知识点" target="_blank">前端知识点</a> <span class="text-muted">ZhangTao_zata</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>下面是一个最基本的html代码body{font-family:Arial,sans-serif;margin:20px;}//JavaScriptfunctionthatdisplaysanalertwhencalledfunctionshowMessage(){alert("Hello!Youclickedthebutton.");}MyFirstHTMLPageWelcometoMyPage</div> </li> <li><a href="/article/1835352325032603648.htm" title="第三十一节:Vue路由:前端路由vs后端路由的了解" target="_blank">第三十一节:Vue路由:前端路由vs后端路由的了解</a> <span class="text-muted">曹老师</span> <div>1.认识前端路由和后端路由前端路由相对于后端路由而言的,在理解前端路由之前先对于路由有一个基本的了解路由:简而言之,就是把信息从原地址传输到目的地的活动对于我们来说路由就是:根据不同的url地址展示不同的页面内容1.1后端路由以前咱们接触比较多的后端路由,当改变url地址时,浏览器会向服务器发送请求,服务器根据这个url,返回不同的资源内容后端路由的特点就是前端每次跳转到不同url地址,都会重新访</div> </li> <li><a href="/article/1835350917352878080.htm" title="华雁智科前端面试题" target="_blank">华雁智科前端面试题</a> <span class="text-muted">因为奋斗超太帅啦</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%95%B4%E7%90%86/1.htm">前端笔试面试问题整理</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>1.var变量的提升题目:vara=1functionfun(){console.log(b)varb=2}fun()console.log(a)正确输出结果:undefined、1答错了,给一个大嘴巴子,错误答案输出结果为:2,1此题主要考察var定义的变量,作用域提升的问题,相当于varaa=1functionfun(){varbconsole.log(b)b=2}fun()console.l</div> </li> <li><a href="/article/1835350535818014720.htm" title="如何建设数据中台(五)——数据汇集—打破企业数据孤岛" target="_blank">如何建设数据中台(五)——数据汇集—打破企业数据孤岛</a> <span class="text-muted">weixin_47088026</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95%E5%92%8C%E6%80%BB%E7%BB%93/1.htm">学习记录和总结</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E5%8F%B0/1.htm">中台</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%8F%B0/1.htm">数据中台</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a> <div>数据汇集——打破企业数据孤岛要构建企业级数据中台,第一步就是将企业内部各个业务系统的数据实现互通互联,打破数据孤岛,主要通过数据汇聚和交换来实现。企业采集的数据可以是线上采集、线下数据采集、互联网数据采集、内部数据采集等。线上数据采集主要载体分为互联网和移动互联网两种,对应有系统平台、网页、H5、小程序、App等,可以采用前端或后端埋点方式采集数据。线下数据采集主要是通过硬件来采集,例如:WiFi</div> </li> <li><a href="/article/1835343473629294592.htm" title="分布式锁和spring事务管理" target="_blank">分布式锁和spring事务管理</a> <span class="text-muted">暴躁的鱼</span> <a class="tag" taget="_blank" href="/search/%E9%94%81%E5%8F%8A%E4%BA%8B%E5%8A%A1/1.htm">锁及事务</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>最近开发一个小程序遇到一个需求需要实现分布式事务管理业务需求用户在使用小程序的过程中可以查看景点,对景点地区或者城市标记是否想去,那么需要统计一个地点被标记的人数,以及记录某个用户对某个地点是否标记为想去,用两个表存储数据,一个地点表记录改地点被标记的次数,一个用户意向表记录某个用户对某个地点是否标记为想去。由于可能有多个用户同时标记一个地点,每个用户在前端点击想去按钮之后,后台接收到请求,从数据</div> </li> <li><a href="/article/1835340577596600320.htm" title="前端CSS面试常见题" target="_blank">前端CSS面试常见题</a> <span class="text-muted">剑亦未配妥</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95/1.htm">前端面试</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>边界塌陷盒模型有两种:W3C盒模型和IE盒模型,区别在于宽度是否包含边框定义:同时给兄弟/父子盒模型设置上下边距,理论上边距值是两者之和,实际上不是注意:浮动和定位不会产生边界塌陷;只有块级元素垂直方向才会产生margin合并margin计算方案margin同为正负:取绝对值大的值一正一负:求和父子元素边界塌陷解决父元素可以通过调整padding处理;设置overflowhidden,触发BFC子</div> </li> <li><a href="/article/107.htm" title="web报表工具FineReport常见的数据集报错错误代码和解释" target="_blank">web报表工具FineReport常见的数据集报错错误代码和解释</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%86%E5%8C%96%E5%B7%A5%E5%85%B7/1.htm">可视化工具</a> <div>在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下。   NS-war-remote=错误代码\:1117 压缩部署不支持远程设计 NS_LayerReport_MultiDs=错误代码</div> </li> <li><a href="/article/234.htm" title="Java的WeakReference与WeakHashMap" target="_blank">Java的WeakReference与WeakHashMap</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%B1%E5%BC%95%E7%94%A8/1.htm">弱引用</a> <div>首先看看 WeakReference wiki 上 Weak reference 的一个例子: public class ReferenceTest { public static void main(String[] args) throws InterruptedException { WeakReference r = new Wea</div> </li> <li><a href="/article/361.htm" title="Linux——(hostname)主机名与ip的映射" target="_blank">Linux——(hostname)主机名与ip的映射</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/hostname/1.htm">hostname</a> <div>一、 什么是主机名 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 linuxsir.org 这样的; 主机名是用于什么的呢? 答:在一个局域网中,每台机器都有一个主</div> </li> <li><a href="/article/488.htm" title="oracle 常用技巧" target="_blank">oracle 常用技巧</a> <span class="text-muted">18289753290</span> <div>oracle常用技巧 ①复制表结构和数据   create table  temp_clientloginUser as   select distinct userid from tbusrtloginlog ②仅复制数据 如果表结构一样 insert into  mytable  select  * &nb</div> </li> <li><a href="/article/615.htm" title="使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException" target="_blank">使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近访问压力增大后台tomcat的日志里面频繁出现 com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResou</div> </li> <li><a href="/article/742.htm" title="IT系统分析师如何学习大数据" target="_blank">IT系统分析师如何学习大数据</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>我是一名从事大数据项目的IT系统分析师。在深入这个项目前需要了解些什么呢?学习大数据的最佳方法就是先从了解信息系统是如何工作着手,尤其是数据库和基础设施。同样在开始前还需要了解大数据工具,如Cloudera、Hadoop、Spark、Hive、Pig、Flume、Sqoop与Mesos。系 统分析师需要明白如何组织、管理和保护数据。在市面上有几十款数据管理产品可以用于管理数据。你的大数据数据库可能</div> </li> <li><a href="/article/869.htm" title="spring学习——简介" target="_blank">spring学习——简介</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发,从简单性,可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。其主要特征是依赖注入、AOP、持久化、事务、SpringMVC以及Acegi Security 为了降低Java开发的复杂性,</div> </li> <li><a href="/article/996.htm" title="自定义颜色的xml文件" target="_blank">自定义颜色的xml文件</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div><?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#FFFFFF</color> <color name="black">#000000</color> &</div> </li> <li><a href="/article/1123.htm" title="运营到底是做什么的?" target="_blank">运营到底是做什么的?</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E8%90%A5%E5%88%B0%E5%BA%95%E6%98%AF%E5%81%9A%E4%BB%80%E4%B9%88%E7%9A%84%EF%BC%9F/1.htm">运营到底是做什么的?</a> <div>文章来源:夏叔叔(微信号:woshixiashushu),欢迎大家关注!很久没有动笔写点东西,近些日子,由于爱狗团产品上线,不断面试,经常会被问道一个问题。问:爱狗团的运营主要做什么?答:带着用户一起嗨。为什么是带着用户玩起来呢?究竟什么是运营?运营到底是做什么的?那么,我们先来回答一个更简单的问题——互联网公司对运营考核什么?以爱狗团为例,绝大部分的移动互联网公司,对运营部门的考核分为三块——用</div> </li> <li><a href="/article/1250.htm" title="js面向对象类和对象" target="_blank">js面向对象类和对象</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/1.htm">面向对象</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0%E5%88%9B%E5%BB%BA%E7%B1%BB%E5%92%8C%E5%AF%B9%E8%B1%A1/1.htm">函数创建类和对象</a> <div>接触js已经有几个月了,但是对js的面向对象的一些概念根本就是模糊的,js是一种面向对象的语言 但又不像java一样有class,js不是严格的面向对象语言 ,js在java web开发的地位和java不相上下  ,其中web的数据的反馈现在主流的使用json,json的语法和js的类和属性的创建相似   下面介绍一些js的类和对象的创建的技术   一:类和对</div> </li> <li><a href="/article/1377.htm" title="web.xml之资源管理对象配置 resource-env-ref" target="_blank">web.xml之资源管理对象配置 resource-env-ref</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联 <resource-env-ref> <resource-env-ref-name>资源名</resource-env-ref-name> <resource-env-ref-type>查找资源时返回的资源类</div> </li> <li><a href="/article/1504.htm" title="Create a composite component with a custom namespace" target="_blank">Create a composite component with a custom namespace</a> <span class="text-muted">sunjing</span> <div>https://weblogs.java.net/blog/mriem/archive/2013/11/22/jsf-tip-45-create-composite-component-custom-namespace   When you developed a composite component the namespace you would be seeing would </div> </li> <li><a href="/article/1631.htm" title="【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter" target="_blank">【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div> 一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does not have a copy of data set and cannot become a primary. Replica sets may have arbiters to add a </div> </li> <li><a href="/article/1758.htm" title="Javascript开发笔记" target="_blank">Javascript开发笔记</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div> 获取iframe内的元素 通常我们使用window.frames["frameId"].document.getElementById("divId").innerHTML这样的形式来获取iframe内的元素,这种写法在IE、safari、chrome下都是通过的,唯独在fireforx下不通过。其实jquery的contents方法提供了对if</div> </li> <li><a href="/article/1885.htm" title="Web浏览器Chrome打开一段时间后,运行alert无效" target="_blank">Web浏览器Chrome打开一段时间后,运行alert无效</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/chorme/1.htm">chorme</a><a class="tag" taget="_blank" href="/search/alert/1.htm">alert</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E6%95%88/1.htm">无效</a> <div>今天在开发的时候,突然间发现alert在chrome浏览器就没法弹出了,很是怪异。 试了试其他浏览器,发现都是没有问题的。 开始想以为是chorme浏览器有啥机制导致的,就开始尝试各种代码让alert出来。尝试结果是仍然没有显示出来。 这样开发的结果,如果客户在使用的时候没有提示,那会带来致命的体验。哎,没啥办法了 就关闭浏览器重启。   结果就好了,这也太怪异了。难道是cho</div> </li> <li><a href="/article/2012.htm" title="编程之美-高效地安排会议 图着色问题 贪心算法" target="_blank">编程之美-高效地安排会议 图着色问题 贪心算法</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class GraphColoringProblem { /**编程之美 高效地安排会议 图着色问题 贪心算法 * 假设要用很多个教室对一组</div> </li> <li><a href="/article/2139.htm" title="机器学习相关概念和开发工具" target="_blank">机器学习相关概念和开发工具</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>基本概念: 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。 开发工具 M</div> </li> <li><a href="/article/2266.htm" title="[宇宙经济学]关于在太空建立永久定居点的可能性" target="_blank">[宇宙经济学]关于在太空建立永久定居点的可能性</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BB%8F%E6%B5%8E/1.htm">经济</a> <div>        大家都知道,地球上的房地产都比较昂贵,而且土地证经常会因为新的政府的意志而变幻文本格式........        所以,在地球议会尚不具有在太空行使法律和权力的力量之前,我们外太阳系统的友好联盟可以考虑在地月系的某些引力平衡点上面,修建规模较大的定居点</div> </li> <li><a href="/article/2393.htm" title="oracle 11g database control 证书错误" target="_blank">oracle 11g database control 证书错误</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF/1.htm">证书错误</a><a class="tag" taget="_blank" href="/search/oracle+11G+%E5%AE%89%E8%A3%85/1.htm">oracle 11G 安装</a> <div>oracle 11g database control 证书错误  win7 安装完oracle11后打开 Database control 后,会打开em管理页面,提示证书错误,点“继续浏览此网站”,还是会继续停留在证书错误页面 解决办法: 是 KB2661254 这个更新补丁引起的,它限制了 RSA 密钥位长度少于 1024 位的证书的使用。具体可以看微软官方公告:</div> </li> <li><a href="/article/2520.htm" title="Java I/O之用FilenameFilter实现根据文件扩展名删除文件" target="_blank">Java I/O之用FilenameFilter实现根据文件扩展名删除文件</a> <span class="text-muted">游其是你</span> <a class="tag" taget="_blank" href="/search/FilenameFilter/1.htm">FilenameFilter</a> <div>在Java中,你可以通过实现FilenameFilter类并重写accept(File dir, String name) 方法实现文件过滤功能。 在这个例子中,我们向你展示在“c:\\folder”路径下列出所有“.txt”格式的文件并删除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </div> </li> <li><a href="/article/2647.htm" title="C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例" target="_blank">C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/array/1.htm">array</a> <div># include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; //a 是数组的名字 5是表示数组元素的个数,并且这五个元素分别用a[0], a[1]...a[4] int i; for (i=0; i<5; ++i) printf("%d\n",</div> </li> <li><a href="/article/2774.htm" title="PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引" target="_blank">PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/primary/1.htm">primary</a> <div>PRIMARY, INDEX, UNIQUE 这3种是一类PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表有下列字段:会员编号   INT会员姓名  </div> </li> <li><a href="/article/2901.htm" title="java集合辅助类 Collections、Arrays" target="_blank">java集合辅助类 Collections、Arrays</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a><a class="tag" taget="_blank" href="/search/Arrays/1.htm">Arrays</a><a class="tag" taget="_blank" href="/search/HashCode/1.htm">HashCode</a> <div>  Arrays、Collections   1 )数组集合之间转换 public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }      a)Arrays.asL</div> </li> <li><a href="/article/3028.htm" title="Spring Security(10)——退出登录logout" target="_blank">Spring Security(10)——退出登录logout</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/logout/1.htm">logout</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E9%80%80%E5%87%BA%E7%99%BB%E5%BD%95/1.htm">退出登录</a><a class="tag" taget="_blank" href="/search/logout-url/1.htm">logout-url</a><a class="tag" taget="_blank" href="/search/LogoutFilter/1.htm">LogoutFilter</a> <div>       要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain。当我们指定了http元素的auto-config属性为true时logout定义是会自动配置的,此时我们默认退出登录的URL为“/j_spring_secu</div> </li> <li><a href="/article/3155.htm" title="透过源码学前端 之 Backbone 三 Model" target="_blank">透过源码学前端 之 Backbone 三 Model</a> <span class="text-muted">逐行分析JS源代码</span> <a class="tag" taget="_blank" href="/search/backbone/1.htm">backbone</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/1.htm">源码分析</a><a class="tag" taget="_blank" href="/search/js%E5%AD%A6%E4%B9%A0/1.htm">js学习</a> <div>Backbone 分析第三部分  Model 概述: Model 提供了数据存储,将数据以JSON的形式保存在 Model的 attributes里, 但重点功能在于其提供了一套功能强大,使用简单的存、取、删、改数据方法,并在不同的操作里加了相应的监听事件, 如每次修改添加里都会触发 change,这在据模型变动来修改视图时很常用,并且与collection建立了关联。 </div> </li> <li><a href="/article/3282.htm" title="SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter" target="_blank">SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter</a> <span class="text-muted">乒乓狂魔</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>这一篇文章主要介绍下HttpMessageConverter整个注册过程包含自定义的HttpMessageConverter,然后对一些HttpMessageConverter进行具体介绍。 HttpMessageConverter接口介绍: public interface HttpMessageConverter<T> { /** * Indicate</div> </li> <li><a href="/article/3409.htm" title="分布式基础知识和算法理论" target="_blank">分布式基础知识和算法理论</a> <span class="text-muted">bluky999</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%87%B4%E6%80%A7%E5%93%88%E5%B8%8C/1.htm">一致性哈希</a><a class="tag" taget="_blank" href="/search/paxos/1.htm">paxos</a> <div>  分布式基础知识和算法理论 BY NODEXY@2014.8.12 本文永久链接:http://nodex.iteye.com/blog/2103218   在大数据的背景下,不管是做存储,做搜索,做数据分析,或者做产品或服务本身,面向互联网和移动互联网用户,已经不可避免地要面对分布式环境。笔者在此收录一些分布式相关的基础知识和算法理论介绍,在完善自我知识体系的同</div> </li> <li><a href="/article/3536.htm" title="Android Studio的.gitignore以及gitignore无效的解决" target="_blank">Android Studio的.gitignore以及gitignore无效的解决</a> <span class="text-muted">bell0901</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/gitignore/1.htm">gitignore</a> <div>  github上.gitignore模板合集,里面有各种.gitignore : https://github.com/github/gitignore   自己用的Android Studio下项目的.gitignore文件,对github上的android.gitignore添加了       # OSX files      //mac os下      .DS_Store </div> </li> <li><a href="/article/3663.htm" title="成为高级程序员的10个步骤" target="_blank">成为高级程序员的10个步骤</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a> <div>What 软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。   Why 得到更多的报酬!因为你的薪水会随着你水平的提高而增加 提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进 历经更大的挑战。随着你的成长,各种影响力也会提高。 </div> </li> <li><a href="/article/3790.htm" title="mongdb在linux下的安装" target="_blank">mongdb在linux下的安装</a> <span class="text-muted">xtuhcy</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>一、查询linux版本号: lsb_release -a  LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noa</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>