Vue3.3指北(四)

Vue3.3指北

  • 1、WebPack - VueCLI
    • 1.1、WebPack安装VueCli
    • 1.2、vue create 创建项目
    • 1.3、项目目录结构介绍
  • 2、Vite+Vue3
    • 2.1、认识create-vue
    • 2.2、使用create-vue创建项目
    • 2.3、项目目录剖析
    • 2.4、ESlint代码规范及手动修复
    • 2.5、通过eslint插件来实现自动修正
  • 3、VueRouter4
    • 3.1、单页应用程序介绍
    • 3.2、前端路由和后端路由
    • 3.3、前端路由模式
      • 3.3.1、hash模式
      • 3.3.2、history 模式
  • 4、VueRouter的使用
    • 4.1、声明路由匹配规则
    • 4.2、不同的历史记录模式
    • 4.3、``补充
      • 4.3.1、样式高亮
      • 4.3.2、自定义类名
    • 4.4、组件的存放目录
    • 4.5、Vue-router的常见用法
      • 4.5.1、路由重定向
      • 4.5.2、404
      • 4.5.3、路由的懒加载
      • 4.5.4、动态路由
  • 5、编程式导航和声明式导航
    • 5.0、命名路由
    • 5.1、编程式导航API
      • 5.1.1、$router.push
        • 1、path跳转方式
        • 2、path路径跳转传参(query传参)
        • 4、name命名路由跳转
        • 5、name命名路由跳转传参 (query传参)
        • 6、name命名路由跳转传参 (动态路由传参)
      • 5.1.2、$router.replace
      • 5.1.3、$router.go(n)
    • 5.2、声明式导航
      • 5.2.1、跳转传参
        • 1、查询参数传参
        • 2、动态路由传参
    • 5.2.2、使用props接收路由参数
  • 6、 router和route的区别
  • 7、嵌套路由
    • 7.1、一级路由
    • 7.2、二级路由
  • 8、导航守卫
    • 8.1、全局前置守卫
      • 8.1.1、示例
      • 8.1.2、路由元信息
      • 8.1.2、next函数的三种调用方式
    • 8.2、全局后置守卫
    • 8.3、keep-alive缓存组件
      • 8.3.1、keep-alive的三个属性
      • 8.1.2、next函数的三种调用方式
    • 8.2、全局后置守卫
    • 8.3、keep-alive缓存组件
      • 8.3.1、keep-alive的三个属性

视频参考教程: 2021年Vue3.0全家桶全系列精讲
随笔记源码: 逍遥的人儿 / KuangStudyVue3
在这里插入图片描述

1、WebPack - VueCLI

  • 官网:安装 | Vue CLI (vuejs.org)

1.1、WebPack安装VueCli

  1. 全局安装 Vue_CLI
npm install -g @vue/cli
  1. 查看 Vue_CLI 版本
# 查看 Vue_CLI 版本
vue --version

# 升级 Vue_CLI 到最新版
npm update -g @vue/cli

1.2、vue create 创建项目

  1. 在空目录下创建新项目
vue create hello-vuecli
  1. 会被提示选取一个 preset 预设

Vue3.3指北(四)_第1张图片

Vue CLI v5.0.8
? Please pick a preset: (Use arrow keys)
> Default ([Vue 3] babel, eslint)
  Default ([Vue 2] babel, eslint)
  Manually select features
  • Default:默认勾选 babel、eslint 的Vue3/Vue2,回车之后直接进入装包
  • manually:自定义勾选特性配置,选择完毕之后,才会进入装包

默认的设置非常适合快速创建一个新项目的原型,而手动设置则提供了更多的选项。

Vue3.3指北(四)_第2张图片

? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 (*) Babel
 ( ) TypeScript
 ( ) Progressive Web App (PWA) Support
 (*) Router
 (*) Vuex
>(*) CSS Pre-processors
 (*) Linter / Formatter
 ( ) Unit Testing
 ( ) E2E Testing

分别选择:

  • Babel:es6 转 es5
  • Router:路由
  • Vuex:数据容器,存储共享数据
  • CSS Pre-processors:CSS 预处理器,后面会提示你选择 less、sass、stylus 等
  • Linter / Formatter:代码格式校验

介绍下所有选项的作用:

选项 描述
Babel vue项目中普遍使用es6语法,但有时我们的项目需要兼容低版本浏览器,这时就需要引入babel插件,将es6转成es5
TypeScript TypeScript通过添加类型来扩展JavaScript。通过了解JavaScript,TypeScript可以节省您捕获错误的时间并在运行代码之前提供修复。任何浏览器,任何操作系统,任何运行JavaScript的地方。
Progressive Web App (PWA) Support 渐进式Web应用程序(PWA)支持
Router 路由
Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化
CSS Pre-processors CSS预处理器
Linter / Formatter 格式化程序
Unit Testing 单元测试
E2E Testing 端到端(end-to-end)

接着选择Vue的版本:

? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
> 3.x
  2.x

接着选择是否使用 history 路由模式,这种模式兼容不好,所以这里输入 n 不使用

? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n)

选择 CSS 预处理器,这里选择我们熟悉的 Less

? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default):
  Sass/SCSS (with dart-sass)
> Less
  Stylus

选择校验工具,这里选择 ESLint + Standard config 标准化

? Pick a linter / formatter config:
  ESLint with error prevention only
  ESLint + Airbnb config
> ESLint + Standard config
  ESLint + Prettier

选择在什么时机下触发代码格式校验:

  • Lint on save:每当保存文件的时候
  • Lint and fix on commit:每当执行 git commit 提交的时候
  • 这里建议两个都选上,更严谨
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
 (*) Lint on save
>(*) Lint and fix on commit (requires Git)

Babel、ESLint 等工具会有一些额外的配置文件,这里的意思是问你将这些工具相关的配置文件写到哪里:

  • In dedicated config files:分别保存到单独的配置文件
  • In package.json:保存到 package.json 文件中
  • 这里建议选择第 1 个,保存到单独的配置文件,这样方便我们做自定义配置
? Where do you prefer placing config for Babel, ESLint, etc.?
> In dedicated config files
  In package.json

这里里是问你是否需要将刚才选择的一系列配置保存起来,然后它可以帮你记住上面的一系列选择,以便下次直接重用。这里根据自己需要输入 y 或者 n,我这里输入 n 不需要。

Save this as a preset for future projects? (y/N)

安装成功后,根据命令行的提示命令输入,来启动项目

Vue3.3指北(四)_第3张图片

Vue3.3指北(四)_第4张图片

1.3、项目目录结构介绍

├── node_modules              第三方包存储目录
├── public                    任何放置在 public 文件夹的静态资源都会被简单的复制,而不经过 webpack。
│   ├── favicon.ico           浏览器收藏夹图标
│   └── index.html            单页面 HTML 文件
├── src
│   ├── assets                公共资源目录,放图片等资源
│   ├── components            公共组件目录
│   ├── router                Vue Router 路由模块
│   ├── store                 Vue 容器模块
│   ├── views                 视图组件存储目录,所有的路由页面都存储到这里
│   ├── App.vue               根组件,最终被替换渲染到 index.html 页面中 #app 入口节点
│   └── main.js               整个项目的启动入口模块
├── .browserslistrc           指定了项目的目标浏览器的范围。这个值会被 @babel/preset-env 和 Autoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀
├── .editorconfig             EditorConfig 帮助开发人员定义和维护跨编辑器(或IDE)的统一的代码风格,详情参考这里:https://editorconfig.org/。
├── .eslintrc.js              ESLint 的配置文件
├── .gitignore                Git 的忽略配置文件,告诉Git项目中要忽略的文件或文件夹
├── README.md                 说明文档
├── babel.config.js           Babel 的配置文件
├── package-lock.json         记录安装时的包的版本号,以保证自己或其他人在 npm install 时大家的依赖能保证一致
└── package.json              包说明文件,记录了项目中使用到的第三方包依赖信息等内容

Vue3.3指北(四)_第5张图片

2、Vite+Vue3

  • 与 Vue CLI 类似,Vite 也是一个提供基本项目脚手架和开发服务器的构建工具。
  • Vite 并不是基于 Webpack 的,它有自己的开发服务器,速度更快
    • Vite 先启动服务,按需加载
    • Webpack 则是先全部打包 再启动服务

2.1、认识create-vue

  • create-vue是Vue官方新的脚手架工具,底层切换到了 vite (下一代前端工具链),为开发提供极速响应

Vue3.3指北(四)_第6张图片

2.2、使用create-vue创建项目

前置条件 - 已安装16.0或更高版本的Node.js

  • 执行如下命令,这一指令将会安装并执行 create-vue
npm create vite@latest

Vue3.3指北(四)_第7张图片

根据提示运行指令,【第一次体验Vite,构建速度真的好快啊我靠

Vue3.3指北(四)_第8张图片

2.3、项目目录剖析

2.4、ESlint代码规范及手动修复

在创建项目时,我们使用的是 JavaScript Standard Style 代码风格的规则。

  • JavaScript Standard Style (standardjs.com)
  • 看一遍,然后在写的时候, 遇到错误就查询解决

下面是这份规则中的一小部分:

  • 字符串使用单引号 – 需要转义的地方除外
  • 无分号 – 这没什么不好。不骗你!
  • 关键字后加空格 if (condition) { ... }
  • 函数名后加空格 function name (arg) { ... }
  • 坚持使用全等 === 摒弃 == 一但在需要检查 null || undefined 时可以使用 obj == null

Vue3.3指北(四)_第9张图片

如果你不认识命令行中的语法报错是什么意思,你可以根据错误代码func-call-spacing 、 space-in-parens 去 ESLint 规则列表中查找其具体含义。

  • 打开 ESLint 规则表,使用页面搜索(Ctrl + F)这个代码,查找对该规则的一个释义。

Vue3.3指北(四)_第10张图片

2.5、通过eslint插件来实现自动修正

  1. eslint会自动高亮错误显示
  2. 通过配置,eslint会自动帮助我们修复错误

在这里插入图片描述

  • 如何配置:如下图添加如下代码

Vue3.3指北(四)_第11张图片

// 当保存的时候,eslint自动帮我们修复错误
"editor.codeActionsOnSave": {
    "source.fixAll": true
},
// 保存代码,不自动格式化
"editor.formatOnSave": false
  • 注意:eslint的配置文件必须在根目录下,这个插件才能才能生效。打开项目必须以根目录打开,一次打开一个项目
  • 注意:使用了eslint校验之后,把vscode带的那些格式化工具全禁用了

settings.json 参考:

{
    "window.zoomLevel": 2,
    "workbench.iconTheme": "vscode-icons",
    "editor.tabSize": 2,
    "emmet.triggerExpansionOnTab": true,
    // 当保存的时候,eslint自动帮我们修复错误
    "editor.codeActionsOnSave": {
        "source.fixAll": true
    },
    // 保存代码,不自动格式化
    "editor.formatOnSave": false
}

3、VueRouter4

  • 官网:Vue Router (vuejs.org)
Vue版本 VueRouter对应版本 VueX对应版本
Vue2 VueRouter3.x VueX3.x
Vue3 VueRouter4.x VueX4.x
  • 路由的作用:修改地址栏路径时,切换显示匹配的组件

  • VueRouter 是 Vue 官方的一个路由插件,是一个第三方包

3.1、单页应用程序介绍

单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现

  • 单页应用网站: 网易云音乐 https://music.163.com/
  • 多页应用网站:京东 https://jd.com/

单页面应用程序,之所以开发效率高,性能好,用户体验好,最大的原因就是:页面按需更新

3.2、前端路由和后端路由

后端路由:

  • 特点:向服务器发送请求,会刷新页面,前后端不能分离
  • 在浏览器的地址栏中切换不同的url时,每次都向后台服务器发出请求,服务器根据不同的响应不同的数据,浏览器接收到数据后再进行渲染,所以后端路由会刷新页面,如果网速慢的话,就会看到一个空白页面等待服务端返回数据,后台路由最大的问题就是不能 前后端分离

前端路由:

  • 特点:不向后台发送请求,不刷新页面,前后端分离
  • 切换路由,并不刷新页面,而是根据路由在虚拟DOM中加载所需要的数据,实现页面内容的改变。

3.3、前端路由模式

前端路由有两种模式:hash 模式和 history 模式

3.3.1、hash模式

  • hash 模式是一种把前端路由的路径用井号 # 拼接在真实 URL 后面的模式。

  • 当井号 # 后面的路径发生变化时,浏览器并不会重新发起请求,而是会触发 hashchange 事件。

  • 我们可以通过直接赋值 location.href 来改变 href , 但是页面不发生刷新

Vue3.3指北(四)_第12张图片

3.3.2、history 模式

history API 是 H5 提供的新特性,允许开发者直接更改前端路由,即更新浏览器 URL 地址而不重新发起请求。

Vue3.3指北(四)_第13张图片

4、VueRouter的使用

目前前端流行的三大框架, 都有自己的路由实现:

  • Angular的ngRouter
  • React的ReactRouter
  • Vue的vue-router

我们的重点是vue-router,vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。

vue-router是基于路由和组件的

  • 路由用于设定访问路径, 将路径和组件映射起来
  • 在vue-router的单页面应用中, 页面的路径的改变就是组件的切换

使用步骤:

  1. 使用npm create vite@latest 创建 Vue 骨架
  2. 下载VueRouter 包:
npm install vue-router@4
  1. src/router/index.js 下初始化如下代码:
    • 如果我们在使用 vueCLI 初始化项目的时候安装了 router,那么就会自动生成 router 文件夹,里面有 index.js
//所有路由的配置都放在这里

//1.引入组件
import  {createRouter,createWebHistory} from 'vue-router'
import Home from "../components/Home.vue";
import Mine from "../components/Mine.vue";


//2.创建路由对象routes
const routes = [
  //  路由重定向:当路由匹配到 `/` 时候,会重定向到 `/home` 上
  {path: '/', redirect: '/home'},
  {path: '/home',name: 'home',component:Home},
  {path: '/mine',name: 'mine',component:Mine}
]

//配置路由和组件之间的应用关系
const router = createRouter({
  history: createWebHistory(),
  routes: routes,
});

// 导出路由对象,将 router 对象传入到Vue实例
export default router
  1. main.js 中导入并挂载路由模块
import { createApp } from 'vue'
import App from './App.vue'

//1.导入路由模块
import router from "./router/index";

const app = createApp(App);

// 把 VueRouter 安装为 Vue 的插件
app.use(router);

// 挂载路由模块
app.mount('#app')
  1. App.vue 中使用路由
    • 声明路由链接
    • 定义路由占位符
<template>
  <div>
    
    <div id="nav">
      <router-link to="/home">首页router-link>
      <router-link to="/mine">我的router-link>
    div>
    
    <router-view>router-view>
  div>
template>


<script>
  export default  {
    setup(){

    }
  }
script>


<style scoped>

style>

Vue3.3指北(四)_第14张图片

4.1、声明路由匹配规则

src/router/index.js 路由模块中,通过 routes 数组声明路由的匹配规则。示例代码如下:

// 在 routes 数组中,声明路由的匹配规则
const routes = [
  //  路由重定向:当路由匹配到 `/` 时候,会重定向到 `/home` 上
  {path: '/', redirect: '/home'},
  // path 表示要匹配的 hash 地址,component 表示要展示的路由组件 
  {path: '/home',name: 'home',component:Home},
  {path: '/mine',name: 'mine',component:Mine}
]

4.2、不同的历史记录模式

  • hash 模式是用 createWebHashHistory() 创建的
//配置路由和组件之间的应用关系
const router = createRouter({
  history: createWebHashHistory(),
  routes: routes,
});

它在内部传递的实际 URL 之前使用了一个哈希字符(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有不好的影响

  • history 模式是用 createWebHistory() 创建的,推荐使用这个模式
//配置路由和组件之间的应用关系
const router = createRouter({
  history: createWebHistory(),
  routes: routes,
});

4.3、补充

4.3.1、样式高亮

使用router-link跳转后,我们发现。当前点击的链接默认加了两个class的值 router-link-exact-activerouter-link-active

  • router-link-active模糊匹配,用的多
// 可以匹配 /my 、 /my/a 、/my/b ....
// 只要是 `/my` 开头的路径,都可以匹配到,这样都会加样式高亮
<router-link to="/my">Home</router-link> 
  • router-link-exact-active精准匹配
// 仅可匹配 /my , 匹配到会加样式高亮
<router-link to="/my">Home</router-link> 

4.3.2、自定义类名

router-link的两个高亮类名太长了,我们希望能定制怎么办

  • 在创建路由对象时,额外配置两个配置项
    • linkActiveClass
    • linkExactActiveClass
const router = createRouter({
  history: createWebHashHistory(),
  routes: routes,
  // 自定义类名
  linkActiveClass: "类名1", // 配置模糊匹配的类名
  linkExactActiveClass: "类名2" // 配置精确匹配的类名
});

Vue3.3指北(四)_第15张图片

4.4、组件的存放目录

.vue文件分为2类:

  • 页面组件 (配置路由规则时使用的组件)
  • 复用组件 (多个组件中都使用到的组件)

存放目录分开的目的就是为了更好的维护

  • src/views文件夹
    • 页面组件 - 页面展示 - 配合路由用
  • src/components文件夹
    • 复用组件 - 展示数据 - 常用于复用

Tips:

  • 脚手架环境下 @指代src目录,可以用于快速引入组件

4.5、Vue-router的常见用法

4.5.1、路由重定向

路由重定向指的是:用户在访问 地址 A 的时候, 强制用户跳转到 地址 C ,从而展示特定的组件页面。

  • 通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向:
const routes = [
  //  路由重定向:当路由匹配到 `/` 时候,会重定向到 `/home` 上
  {path: '/', redirect: '/home'},
  {path: '/home',name: 'home',component:Home},
  {path: '/mine',name: 'mine',component:Mine}
]

4.5.2、404

404的路由,虽然配置在任何一个位置都可以,但一般都配置在其他路由规则的最后面

  • 语法:path: "*" 任意路径 - 前面不匹配就匹配最后这个
//2.创建路由对象
const routes = [
  //  路由重定向:当路由匹配到 `/` 时候,会重定向到 `/home` 上
  {path: '/', redirect: '/home'},
  {path: '/home',name: 'home',component:Home},
  {path: '/mine',name: 'mine',component:Mine},
  // 404   
  {path: '*', component: NotFind}
]

4.5.3、路由的懒加载

  • 首先, 我们知道路由中通常会定义很多不同的页面。这个页面最后被打包在哪里呢? 一般情况下, 是放在一个js文件中。但是, 页面这么多放在一个js文件中, 必然会造成这个页面非常的大。如果我们一次性从服务器请求下来这个页面, 可能需要花费一定的时间, 甚至用户的电脑上还出现了短暂空白的情况。

  • 如何避免这种情况呢? 使用路由懒加载就可以了

  • 路由懒加载的主要作用:

    • 将路由对应的组件打包成一个个的js代码块
    • 只有在这个路由被访问到的时候, 才加载对应的组件
// 原始路由加载
// import Home from '../components/Home'
// 路由懒加载(推荐)
const Home = () => imports('../components/Home')
const routes = [
  //  路由重定向:当路由匹配到 `/` 时候,会重定向到 `/home` 上
  {path: '/', redirect: '/home'},
  {path: '/home',name: 'home',component: () => import('../views/Home.vue')},
]

4.5.4、动态路由

动态路由指的是:把 Hash 地址中可变的部分定义为参数项 ,从而提高路由规则的复用性

在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:

  • /user/aaaa/user/id

  • 除了有前面的 /user 之外,后面还跟上了用户的 ID

  • 这种 pathComponent 的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)


使用语法:在 src/router/index.js 中配置动态路由

const routes = [
  {
   // 使用英文冒号 `:` 来定义路由的参数项   
   path: '/user/:id',
   name: 'user',
   component: () => import('../views/User.vue')
  },
]

我们可以在主组件 App.vue 中模拟服务器传入userId,从而我们拼接到url中

<template>
  <div>
    
      <router-link :to="'/user/' + userId">用户router-link>
    
    <router-view>router-view>
  div>
template>


<script>
import {ref} from 'vue'
  export default  {
    setup(){
      // 服务端获取newsId为001
      const userId = ref('001');

      return {
        userId
      }
    }

  }
script>


<style scoped>

style>

我们也可以在 User.vue 组件中,可以获取到 id 的值,从而展示对应的用户id

<template>
  <div id="user">
    <h2>用户id ------- {{this.$route.params.id}}h2>
  div>
template>

<script>
import {useRoute} from 'vue-router'
export default {
  name: "User",
  setup(){
    // 这里也可以拿到  
    const route = useRoute()
    console.log(route.params.id)
  }
}
script>

<style scoped>

style>

5、编程式导航和声明式导航

在浏览器中,点击链接实现导航的方式,叫做声明式导航。例如:

在浏览器中,调用API方法实现导航的方式,叫做编程式导航。例如:

  • 普通网页中调用 location.href 跳转到新页面的方式,属于编程式导航(用JS代码来进行跳转)

5.0、命名路由

除了 path 之外,你还可以为任何路由提供 name

const routes = [
  {
    path: '/user/:username',
    name: 'user',
    component: User,
  },
]

要链接到一个命名的路由,可以向 router-link 组件的 to 属性传递一个对象:

<router-link :to="{ name: 'user', params: { username: 'erina' }}">
  User
router-link>

这跟代码调用 router.push() 是一回事:

this.$router.push({ name: 'user', params: { username: 'erina' } })

在这两种情况下,路由将导航到路径 /user/erina

5.1、编程式导航API

vue-router 提供了许多编程式导航的 API,其中最常用的导航 API 分别是:

  • this.$router.push('hash地址') :跳转到指定 hash 地址,并增加一条历史记录(当用户点击浏览器后退按钮时,会回到之前的 URL)
  • this.$router.replace('hash地址') :跳转到指定的 hash 地址,并替换掉当前的历史记录
  • this.$router.go(数值n) :实现导航历史前进、后退

编程式导航有两种路由跳转方式:

  • path 路径跳转 (简易方便)

  • name 命名路由跳转 (适合 path 路径长的场景)

5.1.1、$router.push

声明式导航 编程式导航
router.push(...)
1、path跳转方式

语法:

//简单写法
this.$router.push('路由路径')

//完整写法
this.$router.push({
  path: '路由路径'
})

通过 this.$router.push() 方法,可以跳转到指定的 hash 地址,从而展示对应的组件页面。示例代码如下:

Vue2选项式API:

<template>
  <div>
      <h3>Home组件h3>
      <button @click="gotoMovie">跳转到Movie页面button>
  div>
template>

<script>
export default {
  name: "Home",
  methods: {
      gotoMovie() {
          this.$router.push('/movie')
      }
  }
}
script>

<style scoped>

style>

Vue3组合式API:

<template>
  <div>
      <h3>Home组件h3>
      <button @click="gotoMovie">跳转到Movie页面button>
  div>
template>

<script>
import {useRouter} from 'vue-router'
export default {
    setup(){
        // 跳转到Movie页面
        const movie = () => {
            route.push('/movie')
        }
        return {
            movie,
        }
    }
}
script>

<style scoped>

style>
2、path路径跳转传参(query传参)
//简单写法
this.$router.push('/路径?参数名1=参数值1&参数2=参数值2')

//完整写法
this.$router.push({
  path: '/路径',
  query: {
    参数名1: '参数值1',
    参数名2: '参数值2'
  }
})
//示例
this.$router.push({
    path:'/home',
    query:{
        id:id,
        name:jack
    }
})


//路由配置
{
    path:'/home',
    name:Home,
    component:Home
}


//组件中获取参数
this.$route.query.id

**注意:**path不能配合params使用

// `params` 不能与 `path` 一起使用
this.router.push({ path: '/user', params: { username } }) // -> /user
4、name命名路由跳转

特点:适合 path 路径长的场景

语法:

  • 路由规则,必须配置name配置项
const routes = [
  {
   path: '/path/xxx',
   name: '路由名',
   component: XXX
  },
]
  • 通过 name 来进行跳转
this.$router.push({
  name: '路由名'
})
5、name命名路由跳转传参 (query传参)
this.$router.push({
  name: '路由名字',
  query: {
    参数名1: '参数值1',
    参数名2: '参数值2'
  }
})
6、name命名路由跳转传参 (动态路由传参)
this.$router.push({
  name: '路由名字',
  params: {
    参数名: '参数值',
  }
})

name 可以 搭配 params 使用

5.1.2、$router.replace

调用 this.$router.replace() 方法,可以跳转到指定的 hash 地址,从而展示对应的组件页面。

push 和 replace 的区别:

  • push 会增加一条历史记录
  • replace 不会增加历史记录,而是替换掉当前的历史记录
声明式导航 编程式导航
router.replace(...)

5.1.3、$router.go(n)

router.go(-1)  // 返回、后退一步

调用 this.$router.go() 方法,可以在浏览历史中前进和后退。

注意,一般只会前进和后退一层页面,因此 vue-router 提供了如下两个便捷方法:

  • $router.back()
    
    • 在历史记录中, 后退到上一个页面
  • $router.forward()
    
    • 在历史记录中, 前进到下一个页面
  • history.back() 等价于 history.go(-1)

  • history.forward() 等价于 history.go(1)

5.2、声明式导航

5.2.1、跳转传参

我们可以通过两种方式,在跳转的时候把所需要的参数传到其他页面中

  • 查询参数传参
  • 动态路由传参
1、查询参数传参
  • 如何传参?

    <router-link to="/path?参数名=值">router-link>
    
  • 如何接受参数

    //固定用法
    $router.query.参数名
    

示例:

  1. 例如我们在 App.vue 里面向其他路由 /profile 传递对象参数
<router-link :to="{path:'/profile', query: {name: 'why', age: 18}}">router-link>
  1. Profile.vue 组件里面也可以取到传递过来的参数
<template>
  <div>
      <h2>我是 Profile 组件h2>
      <h2>{{this.$route.query}}h2>
       <h2>{{this.$route.query.name}}h2>
       <h2>{{this.$route.query.age}}h2>
  div>
template>

<script>
export default {
  name: "Profile"
}
script>

<style scoped>

style>
2、动态路由传参
  • 使用英文的冒号 : 来定义路由的参数项
// 在 routes 数组中,声明路由的匹配规则
const routes = [
  // 使用英文的冒号 `:` 来定义路由的参数项
  {path: '/user/:id',name: 'user',component: User},
]

/user/:id 表示,必须要传参数。如果不传参数,也希望匹配,可以加个可选符?

// 在 routes 数组中,声明路由的匹配规则
const routes = [
  // 使用英文的冒号 `:` 来定义路由的参数项
  {path: '/user/:id?',name: 'user',component: User},
]

在 User.vue 组件中,可以获取到 id 的值,从而展示对应的用户详情

<template>
  <div class='User-container'>
    <h2>User组件 ------- {{this.$route.params.id}}h2>
  div>
template>

5.2.2、使用props接收路由参数

为了简化路由参数的获取形式,vue-router 允许在 路由规则中开启 props 传参

  • 定义路由规则时,声明 props: true 选项
{
    path: '/user/:id',
    component: User,
    props: true
}
  • 在 User.vue 组件中,可以获取到 id 的值,从而展示对应的用户详情
<template>
  <div class='User-container'>
      
    <h2>User组件 ------- {{id}}h2>
  div>
template>

<script>
export default {
  name: "User",
  props: ['id']			// 1.使用 props 接收路由规则中匹配到的参数项
}
script>

<style scoped>

style>
  • 在主组件 App.vue 中也可以获取到路由参数
<router-link :to=" '/user' + id ">用户router-link>

6、 router和route的区别

  • $router 为VueRouter实例,想要导航到不同URL,则使用$router.push方法
  • $route为当前 router 跳转对象里面可以获取name、path、query、params等

7、嵌套路由

7.1、一级路由

// 在 routes 数组中,声明路由的匹配规则
const routes = [
  // 一级路由
  {path: '/user',name: 'user',component: User},
]

7.2、二级路由

二级路由也叫嵌套路由,当然也可以嵌套三级、四级…,嵌套路由是一个很常见的功能,比如在home页面中, 我们希望通过 /home/news/home/message 访问一些内容

一个路径映射一个组件, 访问这两个路径也会分别渲染两个组件

语法:

  1. 在一级路由下,配置children属性即可
  2. 配置二级路由的出口:在组件内部使用标签
const routes = [
  {
    path: '/mine',
    component:Mine,
    children: [
      // children中的配置项 跟一级路由中的配置项一模一样 
      {path:'xxxx',component:xxxx.vue},
      {path:'xxxx',component:xxxx.vue},
    ]
  },
]
  1. 在一级路由下,配置children属性
  2. 注意:一级的路由path 需要加 / 二级路由的path不需要加 /

配置二级路由的出口:

<template>
    <div class="content">
        <router-view>router-view>
    div>
template>

注意: 配置了嵌套路由,一定配置对应的路由出口,否则不会渲染出对应的组件

技巧:二级路由应该配置到哪个一级路由下呢?

  • 这些二级路由对应的组件渲染到哪个一级路由下,children就配置到哪个路由下边

8、导航守卫

导航守卫可以控制路由的访问权限:

  • vue-router提供的导航守卫主要用来监听路由的进入和离开的
  • vue-router提供了beforeEachafterEach的钩子函数, 它们会在路由即将改变前和改变后触发

8.1、全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置守卫 。因此,在全局前置守卫中,程序员可以对每个路由进行访问权限的控制:

  • 你可以使用 router.beforeEach 注册一个全局前置守卫:
const router = createRouter({
  history: createWebHistory(),
  routes: routes,
});

// 调用路由实例对象的 beforeEach 方法,即可声明"全局前置守卫"
// 每次发生路由跳转的时候,都会触发这个方法
// 全局前置守卫
router.beforeEach((to,from,next)=> {
    // to 是将要访问的路由的信息对象
    // from 是将要离开的路由的信息对象
    // next 是一个函数,调用 next()表示放行,允许这次路由导航
    // 返回 false 以取消导航
    return false
}) 

每个守卫方法接收两个参数:

  • to : 即将要进入的目标的路由对象
  • from:当前导航即将要离开的路由对象
  • next:调用该方法后,才能进入下一个钩子(可选)

注意:如果是前置钩子beforeEach,必须要调用 next() 函数,如果是后置钩子afterEach,不需要主动调用 next() 函数

可以返回的值如下:

  • false: 取消当前的导航。
  • 一个路由地址:通过一个路由地址跳转到一个不同的地址

8.1.1、示例

  • 网页标题是通过</code>来显示的, 但是SPA只有一个固定的HTML, 切换不同的页面时, 标题并不会改变.</li> <li>但是我们可以通过JavaScript来修改<code><title></code>的内容 <code>window.document.title = '新的标题'</code></li> <li>那么在Vue项目中, 在哪里修改? 什么时候修改比较合适呢?</li> </ul> <pre><code class="prism language-javascript"><span class="token keyword">const</span> routes <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// redirect重定向</span> <span class="token literal-property property">redirect</span><span class="token operator">:</span> <span class="token string">'/home'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/home'</span><span class="token punctuation">,</span> <span class="token literal-property property">component</span><span class="token operator">:</span> Home<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 literal-property property">title</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 punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/about'</span><span class="token punctuation">,</span> <span class="token literal-property property">component</span><span class="token operator">:</span> About<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 literal-property property">title</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 punctuation">]</span> <span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token function">createRouter</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">history</span><span class="token operator">:</span> <span class="token function">createWebHistory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token literal-property property">routes</span><span class="token operator">:</span> routes<span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 前置钩子hook(前置回调)</span> router<span class="token punctuation">.</span><span class="token function">beforeEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span>form<span class="token punctuation">,</span>next</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// 从 from 跳转到 to</span> window<span class="token punctuation">.</span>document<span class="token punctuation">.</span>title <span class="token operator">=</span> to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>title <span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> </code></pre> <h4>8.1.2、路由元信息</h4> <p>有时,你可能希望将任意信息附加到路由上,如过渡名称、谁可以访问路由等。这些事情可以通过接收属性对象的<code>meta</code>属性来实现,并且它可以在路由地址和导航守卫上都被访问到。</p> <pre><code class="prism language-javascript"><span class="token keyword">const</span> routes <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/posts'</span><span class="token punctuation">,</span> <span class="token literal-property property">component</span><span class="token operator">:</span> PostsLayout<span class="token punctuation">,</span> <span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'new'</span><span class="token punctuation">,</span> <span class="token literal-property property">component</span><span class="token operator">:</span> PostsNew<span class="token punctuation">,</span> <span class="token comment">// 只有经过身份验证的用户才能创建帖子</span> <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">requiresAuth</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">path</span><span class="token operator">:</span> <span class="token string">':id'</span><span class="token punctuation">,</span> <span class="token literal-property property">component</span><span class="token operator">:</span> PostsDetail <span class="token comment">// 任何人都可以阅读文章</span> <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">requiresAuth</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 punctuation">}</span> <span class="token punctuation">]</span> </code></pre> <p>那么如何访问这个 <code>meta</code> 字段呢?</p> <ul> <li> <p>首先,我们称呼 <code>routes</code> 配置中的每个路由对象为 <strong>路由记录</strong>。路由记录可以是嵌套的,因此,当一个路由匹配成功后,它可能匹配多个路由记录。</p> </li> <li> <p>例如,根据上面的路由配置,<code>/posts/new</code> 这个 URL 将会匹配父路由记录 (<code>path: '/posts'</code>) 以及子路由记录 (<code>path: 'new'</code>)。</p> </li> <li> <p>一个路由匹配到的所有路由记录会暴露为 <code>$route</code> 对象,Vue Router 还为你提供了一个 <code>$route.meta</code> 方法</p> </li> </ul> <p>这意味着你可以简单地写:</p> <pre><code class="prism language-javascript">router<span class="token punctuation">.</span><span class="token function">beforeEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span> <span class="token keyword">from</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>requiresAuth <span class="token operator">&&</span> <span class="token operator">!</span>auth<span class="token punctuation">.</span><span class="token function">isLoggedIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 此路由需要授权,请检查是否已登录</span> <span class="token comment">// 如果没有,则重定向到登录页面</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span> <span class="token comment">// 保存我们所在的位置,以便以后再来</span> <span class="token literal-property property">query</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">redirect</span><span class="token operator">:</span> to<span class="token punctuation">.</span>fullPath <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> </code></pre> <h4>8.1.2、next函数的三种调用方式</h4> <ul> <li>当前用户拥有后台主页的访问权限,直接放行: <code>next()</code></li> <li>当前用户没有后台主页的访问权限,强制其跳转到登录页面:<code>next('/login')</code></li> <li>当前用户没有后台主页的访问权限,不允许跳转到后台主页:<code>next(false)</code></li> </ul> <h3>8.2、全局后置守卫</h3> <pre><code class="prism language-javascript">router<span class="token punctuation">.</span><span class="token function">afterEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span> <span class="token keyword">from</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> window<span class="token punctuation">.</span>document<span class="token punctuation">.</span>title <span class="token operator">=</span> to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>title <span class="token punctuation">}</span><span class="token punctuation">)</span> </code></pre> <p>它们对于分析、更改页面标题、声明页面等辅助功能以及许多其他事情都很有用。</p> <h3>8.3、keep-alive缓存组件</h3> <ul> <li>当路由被<strong>跳转</strong>后,原来所看到的组件就<strong>被销毁</strong>了,<strong>重新返回</strong>后组件又被<strong>重新创建</strong>了</li> </ul> <blockquote> <p>解决办法:利用<code>keep-alive</code>把原来的组件给缓存下来</p> </blockquote> <ul> <li>keep-alive 是 Vue 的内置组件,当它包裹动态组件时,<strong>会缓存不活动的组件实例,而不是销毁</strong>它们。</li> <li>优点:在组件切换过程中把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。</li> </ul> <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>keep-alive</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>keep-alive</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> </code></pre> <h4>8.3.1、keep-alive的三个属性</h4> <ol> <li>include : 组件名数组,只有匹配的组件<strong>会被缓存</strong></li> <li>exclude : 组件名数组,任何匹配的组件都<strong>不会被缓存</strong></li> <li>max : 最多可以<strong>缓存多少</strong>组件实例</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>keep-alive</span> <span class="token attr-name">:include</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>['LayoutPage']<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>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>keep-alive</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> </code></pre> <p>为 <strong>路由记录</strong>。路由记录可以是嵌套的,因此,当一个路由匹配成功后,它可能匹配多个路由记录。</p> <ul> <li> <p>例如,根据上面的路由配置,<code>/posts/new</code> 这个 URL 将会匹配父路由记录 (<code>path: '/posts'</code>) 以及子路由记录 (<code>path: 'new'</code>)。</p> </li> <li> <p>一个路由匹配到的所有路由记录会暴露为 <code>$route</code> 对象,Vue Router 还为你提供了一个 <code>$route.meta</code> 方法</p> </li> </ul> <p>这意味着你可以简单地写:</p> <pre><code class="prism language-javascript">router<span class="token punctuation">.</span><span class="token function">beforeEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span> <span class="token keyword">from</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>requiresAuth <span class="token operator">&&</span> <span class="token operator">!</span>auth<span class="token punctuation">.</span><span class="token function">isLoggedIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 此路由需要授权,请检查是否已登录</span> <span class="token comment">// 如果没有,则重定向到登录页面</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span> <span class="token comment">// 保存我们所在的位置,以便以后再来</span> <span class="token literal-property property">query</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">redirect</span><span class="token operator">:</span> to<span class="token punctuation">.</span>fullPath <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> </code></pre> <h4>8.1.2、next函数的三种调用方式</h4> <ul> <li>当前用户拥有后台主页的访问权限,直接放行: <code>next()</code></li> <li>当前用户没有后台主页的访问权限,强制其跳转到登录页面:<code>next('/login')</code></li> <li>当前用户没有后台主页的访问权限,不允许跳转到后台主页:<code>next(false)</code></li> </ul> <h3>8.2、全局后置守卫</h3> <pre><code class="prism language-javascript">router<span class="token punctuation">.</span><span class="token function">afterEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span> <span class="token keyword">from</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> window<span class="token punctuation">.</span>document<span class="token punctuation">.</span>title <span class="token operator">=</span> to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>title <span class="token punctuation">}</span><span class="token punctuation">)</span> </code></pre> <p>它们对于分析、更改页面标题、声明页面等辅助功能以及许多其他事情都很有用。</p> <h3>8.3、keep-alive缓存组件</h3> <ul> <li>当路由被<strong>跳转</strong>后,原来所看到的组件就<strong>被销毁</strong>了,<strong>重新返回</strong>后组件又被<strong>重新创建</strong>了</li> </ul> <blockquote> <p>解决办法:利用<code>keep-alive</code>把原来的组件给缓存下来</p> </blockquote> <ul> <li>keep-alive 是 Vue 的内置组件,当它包裹动态组件时,<strong>会缓存不活动的组件实例,而不是销毁</strong>它们。</li> <li>优点:在组件切换过程中把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。</li> </ul> <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>keep-alive</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>keep-alive</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> </code></pre> <h4>8.3.1、keep-alive的三个属性</h4> <ol> <li>include : 组件名数组,只有匹配的组件<strong>会被缓存</strong></li> <li>exclude : 组件名数组,任何匹配的组件都<strong>不会被缓存</strong></li> <li>max : 最多可以<strong>缓存多少</strong>组件实例</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>keep-alive</span> <span class="token attr-name">:include</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>['LayoutPage']<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>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>keep-alive</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> </code></pre> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1718874252142260224"></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">你可能感兴趣的:(#,Vue3灬大乘期,vue.js)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1773512348661776384.htm" title="中原焦点团队38期王芳芳坚持分享第236天,20230630总约练134次,来访113次,咨8次,观察员13次" target="_blank">中原焦点团队38期王芳芳坚持分享第236天,20230630总约练134次,来访113次,咨8次,观察员13次</a> <span class="text-muted">芳芳王</span> <div>学习焦点的初心是想拯救孩子,孩子由于沉迷游戏,成绩下滑,在学习的过程中发现是自己的教育方式出了状况。经过半年的学习,一些焦点的基本技巧,如接纳、欣赏、倾听、同理心、尊重等都有了一定的了解。但在实际应用时仍然存在很多问题,感觉自己仍然没有放下对孩子成绩的期望,仍然把握不住对孩子管理的度。我该如何去陪伴好孩子?多用心去听课,并加强反思,多约练。去思考如何让自己快乐起来?</div> </li> <li><a href="/article/1773449688918327296.htm" title="李金清焦点网络初级班34期 约练46次,坚持分享79天" target="_blank">李金清焦点网络初级班34期 约练46次,坚持分享79天</a> <span class="text-muted">清水清水</span> <div>约练心得咨询中,忍受不了沉默;聊天中,忍受不了寂静;工作中,忍受不了闲暇。自己心中按耐不住的着急,总想一步做的最好,总想让大家开心,总怕别人尴尬,总怕冷场,,,这些都充满着习惯,充满着认为自己该做的事。咨询中的沉默是为了让来访者时间考虑思索,更好的打开,有力咨询的开展。聊天中的静下来,是为了对上个问题的思考和对下个问题的开展留有空间。工作中的闲暇,是为了让自己有时间静下来整理和积累,为了以后的忙而</div> </li> <li><a href="/article/1773442385917837312.htm" title="今日阅读任务" target="_blank">今日阅读任务</a> <span class="text-muted">扎西措的简书</span> <div>四圣谛是总纲释迦牟尼佛开示的法很多,其中四圣谛是纲要。一般祖师们讲经或讲论时,会先讲“略”的,再讲“广”的,先讲纲要,把方向抓出来,再慢慢慢慢发展;如果一开始就从头讲到尾,可能会让听者东南西北都搞不清。先把大纲抓住,就容易与别的法连结。释尊所讲的所有法当中,包括小乘、大乘、显教、密教的法,总的来说,四圣谛是纲要,不论南传的小乘佛教、或是汉传与藏传的大乘佛教,四圣谛是大家共同承认的、大家共有的基础。</div> </li> <li><a href="/article/1773438297771671552.htm" title="酷开科技依托酷开系统用“平台+产品+场景”塑造全屋智能生活!" target="_blank">酷开科技依托酷开系统用“平台+产品+场景”塑造全屋智能生活!</a> <span class="text-muted">京创尤品</span> <a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%80/1.htm">科技</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a> <div>杰弗里·摩尔的“鸿沟理论”中写道:高科技企业推进产品的早期市场和产品被广泛接受的主流市场之间,存在着一条巨大的“鸿沟”。“鸿沟”,指产品吸引早期接纳者后、赢得更多客户前的那段间歇,以及其中可预知和不可预知的阻碍。多数产品或企业的失败都发生在“鸿沟期”。目前,智慧家居的发展正处在一个“鸿沟期”:势头看似迅猛,但真实用户有限。对于一些企业而言,这条巨大“鸿沟”之所以出现,在于他们对如何推进智慧家居并不</div> </li> <li><a href="/article/1773424105362620416.htm" title="2021-04-11" target="_blank">2021-04-11</a> <span class="text-muted">英英成长日记</span> <div>(1)每天写50字以上的催眠语言肯定自己或孩子或爱人今天的公益沙龙第二期,你有充分的准备!所以一切都很顺利!你还可以更灵活,我相信你可以做到!你是一个有爱的人!爱能成就一切!加油!分享也是成长!你说对吗?(2)每天晚上跟潜意识沟通一次。谢谢你潜意识,今天支持我讲完两个小时沙龙!感恩你每天这样支持我成长学习!(3)每天学习三条时间管理方法,共100条。(4)自己想要坚持3件事(确定下来至少一件,坚持</div> </li> <li><a href="/article/1773422718461476864.htm" title="如果你也中午睡不着" target="_blank">如果你也中午睡不着</a> <span class="text-muted">心理小松</span> <div>不知从何时开始,我中午就很难入睡了。尤其是这个冬天,尤其是这个疫情期。可能是脚冷?躺在床上,脚冰冷的感觉很是难以忽略。躺在床上就像是一脚踩进了冰湖。后来我想了很多办法,我有两个暖手宝。嗯,前女友寄回给我的。中午放在脚下,那天中午果然睡得舒服。然而,第二天这就不行了。还是睡不着。可能是覆盖不到脚。毕竟是暖手的。幸好还有十几个暖宝宝。中午睡前贴在脚上。关上窗户,拉好窗帘,本来通风的,虽然疫情,我还是选</div> </li> <li><a href="/article/1773415532297519104.htm" title="忙忙碌碌才是生活" target="_blank">忙忙碌碌才是生活</a> <span class="text-muted">北渔说</span> <div>观海年后上班,因为项目接近尾声甚是消闲。说是消闲,其实身消闲,心不消闲。都说当下社会是焦虑的社会,因为人们普遍焦虑。上班已有半月,想想这好像是上班几年来最空闲的一段时间了。空闲的主要原因是工作处在了瓶颈期,心有余而力不足。因为有一颗力求完美的心,但却没有力求完美的能力,所以徒有焦虑。不知道大家有没有这种感觉,在高压学习或工作一段时间之后,突然闲下来就会茫然无措。有时候读一本长篇,好不容易结束本来应</div> </li> <li><a href="/article/1773407714278440960.htm" title="绘本讲师训练营【27期】1/21阅读——《绘本之力》" target="_blank">绘本讲师训练营【27期】1/21阅读——《绘本之力》</a> <span class="text-muted">Miya儿童情商绘本讲师</span> <div>27020-林玉霞图片发自App拿到这本书,就被封面所吸引。在一片广阔的树林里,高高低低的树,各种动物,在树林草地的中间,一位父亲陪着一位孩子在读着绘本。让人感觉充满了爱、宁静、和谐和拥有了整个世界。我想这就是绘本能够带给人类的境界吧!是的,接下来书中就提到了“绘本实是神奇的东西。”神奇之处有:1、0-100岁都能从中获得乐趣。2、好绘本看过一次后,能让人印象深刻,留存心底。3、好绘本跨越了文化的</div> </li> <li><a href="/article/1773363334947602432.htm" title="2021-05-02" target="_blank">2021-05-02</a> <span class="text-muted">973939d99528</span> <div>今天我们全家开车到安丘青云山玩,到了青云山由于是假期的缘故人太多!决定避开高峰期再来玩!然后开车就回家了!回来到超市买的排骨中午全家喝的排骨汤!下午老婆让我去超市买鸡爪做泡椒鸡爪给孩子们吃!老婆做的。味道棒极了孩子们很喜欢吃我也吃了不少晚上一家人在家玩!</div> </li> <li><a href="/article/1773212227294265344.htm" title="reactive和ref的异同、toRef和toRefs的使用" target="_blank">reactive和ref的异同、toRef和toRefs的使用</a> <span class="text-muted">Niucode</span> <a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</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><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>一、reactive和ref有了reactive为什么还要ref?ref处理起基本数据类型来更加的方便快捷,性能要更好。ref内部值的变化只会触发订阅它的副作用函数(effect)更新,而reactive(Proxy)内部对象的任何属性变化都会触发整个对象的重新渲染。相同点:都是Vue3提供的用于创建响应式数据的函数;在组件中都能够触发视图更新,实现数据的双向绑定。不同点:数据类型:reactiv</div> </li> <li><a href="/article/1772751950207582208.htm" title="时间管理训练营第六期作业:通过excell表格记录,你有什么体会?" target="_blank">时间管理训练营第六期作业:通过excell表格记录,你有什么体会?</a> <span class="text-muted">三味淑屋</span> <div>作业没有记录就没有发生。记录,你才能够在时光的隧道里发现许多光,看到更多希望!作业1、你专注在哪里,你就会在哪里出成果。这三天的时间盘点,虽然今天还没结束,但是基本上都是按照平时的安排来进行。记录的过程中,会看到自己的时间花在哪。今年在个人成长的维度上,会看到这一块时间相对别的板块比较多,在娱乐休闲与朋友关系上的时间比较少,需要提醒自己要在时间上再做一些分配,让自己的工作和生活更平衡些。当然,这个</div> </li> <li><a href="/article/1772722967034265600.htm" title="2018-08-17" target="_blank">2018-08-17</a> <span class="text-muted">天黑黑_e3af</span> <div>姓名:王丽组别:第377期六项精进努力二组组员【日精进打卡第113天】【知-学习】背诵《大学》开篇5遍共100遍背诵《六项精进》大纲5遍共100遍【经典名句分享】如果,有醒不了的梦,我一定去做;如果,有走不完的路,我一定去走;如果,有变不了的爱,我一定去求。让懂的人懂,让不懂的人不懂;让世界是世界,我甘心是我的茧。【行-实践】一、修身:做事要一丝不苟的完成,今日事今日毕。二、齐家:与父母谈谈近况。</div> </li> <li><a href="/article/1772715538385010688.htm" title="4.13小结" target="_blank">4.13小结</a> <span class="text-muted">茶茶6858</span> <div>扫楼爱榕园和海月一期依然还是很紧张的情绪溜达了几天,今晚试着站在一个地方一直出手,人流量虽不大,但都会接单,很多时候刚开始都不接,多说两句也挺感兴趣。</div> </li> <li><a href="/article/1772696600393613312.htm" title="C/C++中的Static关键字" target="_blank">C/C++中的Static关键字</a> <span class="text-muted">SuhyOvO</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>Static关键字在C和C++编程中是不可或缺的一部分,它用于定义具有持久存储期的变量和函数,以及类的静态成员。虽然它的使用相对直接,但不恰当的使用可能会导致难以调试的错误和混淆。本文将探讨static关键字的概念、作用以及在C和C++中的具体应用。文章目录第一部分:深入理解Static关键字定义和基本概念在C和C++中static的基本作用第二部分:Static在C语言中的使用静态全局变量静态局</div> </li> <li><a href="/article/1772618299398488064.htm" title="Vue:为什么要使用v-cloak" target="_blank">Vue:为什么要使用v-cloak</a> <span class="text-muted">刻刻帝的海角</span> <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><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>Vue.js是一种流行的JavaScript框架,它使我们能够构建交互性强大的用户界面。在Vue.js中,v-cloak是一个指令,用于解决在页面加载时出现的闪烁问题。本文将介绍如何使用v-cloak及代码来优化Vue.js应用程序的渲染效果。引言当我们使用Vue.js构建应用程序时,有时会遇到一个问题:在页面加载时,由于Vue.js需要一定的时间来解析和渲染模板,会导致页面上显示出未经处理的Mu</div> </li> <li><a href="/article/1772558879675187200.htm" title="张乐,中原焦点团队网络初级第33期,坚持分享第75天,2022-05-04" target="_blank">张乐,中原焦点团队网络初级第33期,坚持分享第75天,2022-05-04</a> <span class="text-muted">梦里花雕</span> <div>奇迹问句奇迹问句引导当事人进入想象:当问题已经获得解决时之未来美好愿景、细节以及正向影响为何。再结合其他问句带领当事人思考如何由目前的处境向此愿景靠近一步。奇迹问句给予当事人一个深层的相信与想象:他们的生活是可以改变的。如此将能鼓舞当事人拥有希望,也让当事人愿意思考可能改变的结果与好处。奇迹问句特别能在尊重当事人的问题强度下,使当事人能戏剧化地从谈论问题转而开始聚焦思考解决之道,同时还能帮助当事人</div> </li> <li><a href="/article/1772544887032446976.htm" title="金英沧州焦点解决初64中17,本周第二次、第三次约练,总第440次、第441次分享,坚持分享第187天" target="_blank">金英沧州焦点解决初64中17,本周第二次、第三次约练,总第440次、第441次分享,坚持分享第187天</a> <span class="text-muted">守护甜心</span> <div>第440次分享青春期顾左右而言他的女生,可以和她聊她的小说,也许是她杜撰的小说,但是可以从中看出她的投射。通过谈论小说中主人公的情感、经历、认知、感受,了解她,走进她的脉络。当了解的足够多了,情绪宣泄的差不多了,可以联系到现实生活中,再聊现实生活,她就不那么防御了,因为她觉得咨询师理解她,她感到安全。一个外表阳光帅气自立的女孩子,内心一片柔情似水,渴望爱情,渴望被呵护,却羞于说出口,当她能说出来,</div> </li> <li><a href="/article/1772509845434466304.htm" title="生信星球学习小组第80期 Day3笔记--ZJUSKY" target="_blank">生信星球学习小组第80期 Day3笔记--ZJUSKY</a> <span class="text-muted">ZJUSKY</span> <div>Conda简介Conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。简单来说Conda就是Linux系统下的应用商店,你可以在通过Conda下载,安装很多软件。这里我们推荐miniconda,它只包含了最基本的内容,python和conda,以及相关的必须依赖项。精简的miniconda足够满足日常生信使用。下载miniconda推荐使用清</div> </li> <li><a href="/article/1772495599967469568.htm" title="第四期【践行总结】第7周—真诚" target="_blank">第四期【践行总结】第7周—真诚</a> <span class="text-muted">记录我的生活</span> <div>践行时间:20181022——20181028本周践行真诚:不采用任何有害的欺骗行为,想问题和说话都要公平公正。【目标】1.不背后议论人,管好自己的嘴巴。2.对待孩子也要真诚,但可以说善意的谎言。3.长养同理心,真正站在对方角度思考问题。【百日目标践行】1.看书:«让孩子像孩子那样长大»80页«活法»50页2.:点评文2个:得到精品课复盘笔记1个:怎样高效管理你的精力第2节家有俩娃系列2则3.运动</div> </li> <li><a href="/article/1772494563882106880.htm" title="vue3中使用过渡动画transition" target="_blank">vue3中使用过渡动画transition</a> <span class="text-muted">前端小趴菜05</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>//appear表示一进入页面就使用动画hello.slide-enter-active,//进入动画的生效状态.slide-leave-active{//离开动画的生效状态transition:all0.5sease;}.slide-enter-from,//进入动画开始状态.slide-leave-to{//离开动画结束状态height:0px!important;}.slide-enter-</div> </li> <li><a href="/article/1772452087251140608.htm" title="高省创始人邀请码,高省app邀请码送三皇冠是真的吗" target="_blank">高省创始人邀请码,高省app邀请码送三皇冠是真的吗</a> <span class="text-muted">凌风导师</span> <div>高省创始人邀请码,高省app邀请码送三皇冠是真的吗高省创始人邀请码,高省app邀请码送三皇冠是真的吗运营商享有全网粉丝锁用+本体同城体系,不占用太多时间。天下就那么几个都市,年最大红利期,背景可以讨论我,看懂了吗?高省-各大应用商城下载即可-购物领劵返利高,邀请码切记填999777,凌风高省邀请码999777,全网唯一教你技术的老师码填对码直送2皇冠总裁等级,《凌风导师125130414》送价值百</div> </li> <li><a href="/article/1772439736435146752.htm" title="慢点长大" target="_blank">慢点长大</a> <span class="text-muted">午后的苏木</span> <div>作为一个还在哺乳期的职场妈妈,工作和带娃似乎总是充满着矛盾和冲突。每天紧赶慢赶的回家,进了家门,看到宝贝的小脸,一天的疲惫似乎瞬间消散。但是消散的时间也很短,大概只有一个微笑的时间。接下来就是准备饭,喂奶,吃饭,之后就是没完没了的收拾,厨房啊,餐厅啊。再之后就要给宝宝准备辅食,又是一顿烧脑和鸡飞狗跳。都说给孩子最好的爱是陪伴,但是似乎仿佛只一天中,我一直在忙东忙西,就像一个影像一样只不过在宝贝的眼</div> </li> <li><a href="/article/1772431668003536896.htm" title="2018年5月1日" target="_blank">2018年5月1日</a> <span class="text-muted">朱非凡</span> <div>姓名:朱非凡公司:杭州美登贸易上海361期《六项精进》反省二组【日精进打卡第43天】【知~学习】《六项精进》3遍共139遍《大学》1遍共59遍••••••【经典名句分享】自律给我自由【行~实践】一、修身:阅读书籍学习shopify推广方法二、齐家:三、建功:1.网站结构思路2.产品供应商查找3.付款方式设置4.上传产品{积善}:发愿从2018年3月19日起1年内365善事。今日1善,累计40善。【</div> </li> <li><a href="/article/1772408965112594432.htm" title="帮你清理阻碍你摄影进步的7个问题" target="_blank">帮你清理阻碍你摄影进步的7个问题</a> <span class="text-muted">暂未命名人员</span> <div>“为什么自己拍的照片不够好看?”这个问题是每个摄影师晋级之路上都会遇到的,可以算是摄影爱好者或者是职业摄影师成长之路必须要经历的瓶颈期。如何找到问题根源并比较快地提升摄影水平呢?1、是否每幅照片都要有主体——主体与主题的探讨许多初级摄影者可能不会考虑这类问题,主体与主题究竟是什么样的关系,是否每张照片都需要一个明确的主题或主体。但当你拍摄的照片被问“你拍这张照片究竟想说明什么?”、“你想呈现给观者</div> </li> <li><a href="/article/1772282932589821952.htm" title="2022-8-29晨间日记" target="_blank">2022-8-29晨间日记</a> <span class="text-muted">明心279</span> <div>今天是什么日子起床:5.40就寝:天气:多云心情:开心纪念日:任务清单昨日完成的任务,最重要的三件事:改进:习惯养成:周目标·完成进度学习·信息·阅读上午复习古书下午看教材第二册健康·饮食·锻炼站桩40早上吃大米粥煮花生米中午麻辣米线晚上青菜豆腐火锅人际·家人·朋友转100红包给流浪猫安置点,有一只猫咪被领养后又被弃养,发情期,需要做绝育,听说后有些动了恻隐之心,转了一个红包用于资助流浪猫孩子晚上</div> </li> <li><a href="/article/1772263659658084352.htm" title="新起点" target="_blank">新起点</a> <span class="text-muted">孙维洁</span> <div>日精进打卡,姓名:孙维洁六项精进第364期乐2学员,403期乐2志工,456期乐2志工,496服务和带队志工,504服务志工,515服务志工,519上海服务志工图片发自App一、【知~勤学】①持诵《大学》开篇1遍总210六项精进》大纲1遍总210已学习书籍:了凡四训,六项精进,母亲的教诲改变我的一生,稻盛和夫的最后一战,空巴半本,阿米巴28页。抄写活法,每天1页,开始于20190403跟抄宁夫老师</div> </li> <li><a href="/article/1772239549091610624.htm" title="第十五届蓝桥杯软件赛模拟赛第三期(c++,python,java通用)" target="_blank">第十五届蓝桥杯软件赛模拟赛第三期(c++,python,java通用)</a> <span class="text-muted">北洋的霞洛</span> <a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF%E5%8E%86%E5%B9%B4%E7%9C%9F%E9%A2%98/1.htm">蓝桥杯历年真题</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>注:1.填空题用最简单的方式(暴力递归或枚举)得出答案即可。2.编程题若无思路可用暴力递归或枚举也能拿到不少的分数。第一题【问题描述】请问2023有多少个约数?即有多少个正整数,使得2023是这个正整数的整数倍。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【思路】简单模拟【代码】#includeusing</div> </li> <li><a href="/article/1772131921569054720.htm" title="何止于米,相期以茶" target="_blank">何止于米,相期以茶</a> <span class="text-muted">散书斋</span> <div>秦老师推送了一条信息:“何止于米,相期以茶”,是冯友兰先生赠金岳霖先生的一副对联,文人相和,重继绝学,著作等身,愿望美好,名人和普通人心理需求没啥两样,只是文采不同而已。88岁被中国人称为“米寿”,之所以是“米寿”,是因为“米”字上下两个八字,中间十字,所以是八十八。“茶”字上面二十八,下面八十,两者相加,就是108岁。还有另外一个意思”米”代表物质基础和保障,”茶”带有禅意,表示在精神层面的追求</div> </li> <li><a href="/article/1772127522750791680.htm" title="突破编程_C++_C++11新特性(type_traits的概念以及核心类型特性)" target="_blank">突破编程_C++_C++11新特性(type_traits的概念以及核心类型特性)</a> <span class="text-muted">breakthrough_01</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1type_traits的概述type_traits是C++标准模板库(STL)中的一个头文件,它定义了一系列模板类,这些模板类在编译期获取某一参数、某一变量、某一个类等的类型信息,主要用于进行静态检查。通过使用type_traits,程序员可以在编译时就获得关于类型的详细信息,从而可以在不实际运行程序的情况下进行类型相关的优化和检查。type_traits中的内容主要可以分为以下几类:辅助基类:</div> </li> <li><a href="/article/1772090189619986432.htm" title="年轻党员干部干部更要内固“四心”,外铸“四力”" target="_blank">年轻党员干部干部更要内固“四心”,外铸“四力”</a> <span class="text-muted">月龙葵</span> <div>第17期《求是》杂志将发表中共中央总书记、国家主席、中央军委主席习近平的重要文章《思政课是落实立德树人根本任务的关键课程》。文章强调,青少年是祖国的未来、民族的希望。正如习近平总书记所说,“青年一代有理想、有本领、有担当,国家就有前途,民族就有希望。”年轻干部作为青年群体的先进代表和中坚力量,是国家的未来、民族的希望,肩负着继承和发展党和国家事业的历史使命。在走进新时代,追梦中国的今天,年轻干部更</div> </li> <li><a href="/article/65.htm" title="Java常用排序算法/程序员必须掌握的8大排序算法" target="_blank">Java常用排序算法/程序员必须掌握的8大排序算法</a> <span class="text-muted">cugfy</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序。 先来看看8种排序之间的关系:   1.直接插入排序 (1</div> </li> <li><a href="/article/192.htm" title="【Spark102】Spark存储模块BlockManager剖析" target="_blank">【Spark102】Spark存储模块BlockManager剖析</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/manager/1.htm">manager</a> <div>Spark围绕着BlockManager构建了存储模块,包括RDD,Shuffle,Broadcast的存储都使用了BlockManager。而BlockManager在实现上是一个针对每个应用的Master/Executor结构,即Driver上BlockManager充当了Master角色,而各个Slave上(具体到应用范围,就是Executor)的BlockManager充当了Slave角色</div> </li> <li><a href="/article/319.htm" title="linux 查看端口被占用情况详解" target="_blank">linux 查看端口被占用情况详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/1.htm">端口占用</a><a class="tag" taget="_blank" href="/search/netstat/1.htm">netstat</a><a class="tag" taget="_blank" href="/search/lsof/1.htm">lsof</a> <div>经常在启动一个程序会碰到端口被占用,这里讲一下怎么查看端口是否被占用,及哪个程序占用,怎么Kill掉已占用端口的程序   1、lsof -i:port port为端口号   [root@slave /data/spark-1.4.0-bin-cdh4]# lsof -i:8080 COMMAND   PID USER   FD   TY</div> </li> <li><a href="/article/446.htm" title="Hosts文件使用" target="_blank">Hosts文件使用</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/hosts/1.htm">hosts</a><a class="tag" taget="_blank" href="/search/locahost/1.htm">locahost</a> <div>     一切都要从localhost说起,经常在tomcat容器起动后,访问页面时输入http://localhost:8088/index.jsp,大家都知道localhost代表本机地址,如果本机IP是10.10.134.21,那就相当于http://10.10.134.21:8088/index.jsp,有时候也会看到http: 127.0.0.1:</div> </li> <li><a href="/article/573.htm" title="java excel工具" target="_blank">java excel工具</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/Java+excel/1.htm">Java excel</a> <div>直接上代码,一看就懂,利用的是jxl: import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import </div> </li> <li><a href="/article/700.htm" title="web报表工具finereport常用函数的用法总结(数组函数)" target="_blank">web报表工具finereport常用函数的用法总结(数组函数)</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><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/%E5%87%BD%E6%95%B0%E6%80%BB%E7%BB%93/1.htm">函数总结</a> <div>ADD2ARRAY ADDARRAY(array,insertArray, start):在数组第start个位置插入insertArray中的所有元素,再返回该数组。 示例: ADDARRAY([3,4, 1, 5, 7], [23, 43, 22], 3)返回[3, 4, 23, 43, 22, 1, 5, 7]. ADDARRAY([3,4, 1, 5, 7], "测试&q</div> </li> <li><a href="/article/827.htm" title="游戏服务器网络带宽负载计算" target="_blank">游戏服务器网络带宽负载计算</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> <div>家庭所安装的4M,8M宽带。其中M是指,Mbits/S 其中要提前说明的是: 8bits = 1Byte 即8位等于1字节。我们硬盘大小50G。意思是50*1024M字节,约为 50000多字节。但是网宽是以“位”为单位的,所以,8Mbits就是1M字节。是容积体积的单位。 8Mbits/s后面的S是秒。8Mbits/s意思是 每秒8M位,即每秒1M字节。 我是在计算我们网络流量时想到的</div> </li> <li><a href="/article/954.htm" title="我的spring学习笔记2-IoC(反向控制 依赖注入)" target="_blank">我的spring学习笔记2-IoC(反向控制 依赖注入)</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3+%E7%B3%BB%E5%88%97/1.htm">Spring 3 系列</a> <div>IoC(反向控制 依赖注入)这是Spring提出来了,这也是Spring一大特色。这里我不用多说,我们看Spring教程就可以了解。当然我们不用Spring也可以用IoC,下面我将介绍不用Spring的IoC。 IoC不是框架,她是java的技术,如今大多数轻量级的容器都会用到IoC技术。这里我就用一个例子来说明: 如:程序中有 Mysql.calss 、Oracle.class 、SqlSe</div> </li> <li><a href="/article/1081.htm" title="高性能mysql 之 选择存储引擎(一)" target="_blank">高性能mysql 之 选择存储引擎(一)</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/InnoDB/1.htm">InnoDB</a><a class="tag" taget="_blank" href="/search/MySQL%E5%BC%95%E6%93%8E/1.htm">MySQL引擎</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E/1.htm">存储引擎</a> <div> 1 没有特殊情况,应尽可能使用InnoDB存储引擎。   原因:InnoDB 和 MYIsAM 是mysql 最常用、使用最普遍的存储引擎。其中InnoDB是最重要、最广泛的存储引擎。她   被设计用来处理大量的短期事务。短期事务大部分情况下是正常提交的,很少有回滚的情况。InnoDB的性能和自动崩溃   恢复特性使得她在非事务型存储的需求中也非常流行,除非有非常</div> </li> <li><a href="/article/1208.htm" title="UDP网络编程" target="_blank">UDP网络编程</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/UDP%E7%BC%96%E7%A8%8B/1.htm">UDP编程</a><a class="tag" taget="_blank" href="/search/%E5%B1%80%E5%9F%9F%E7%BD%91%E7%BB%84%E6%92%AD/1.htm">局域网组播</a> <div>  UDP是基于无连接的,不可靠的传输   与TCP/IP相反       UDP实现私聊,发送方式客户端,接受方式服务器 package netUDP_sc; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Ine</div> </li> <li><a href="/article/1335.htm" title="JQuery对象的val()方法执行结果分析" target="_blank">JQuery对象的val()方法执行结果分析</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>        JavaScript中,如果id对应的标签不存在(同理JAVA中,如果对象不存在),则调用它的方法会报错或抛异常。在实际开发中,发现JQuery在id对应的标签不存在时,调其val()方法不会报错,结果是undefined。         </div> </li> <li><a href="/article/1462.htm" title="http请求测试实例(采用json-lib解析)" target="_blank">http请求测试实例(采用json-lib解析)</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>        由于fastjson只支持JDK1.5版本,因些对于JDK1.4的项目,可以采用json-lib来解析JSON数据。如下是http请求的另外一种写法,仅供参考。 package com; import java.util.HashMap; import java.util.Map; import </div> </li> <li><a href="/article/1589.htm" title="【RPC框架Hessian四】Hessian与Spring集成" target="_blank">【RPC框架Hessian四】Hessian与Spring集成</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>在【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中介绍了基于Hessian的RPC服务的实现步骤,在那里使用Hessian提供的API完成基于Hessian的RPC服务开发和客户端调用,本文使用Spring对Hessian的集成来实现Hessian的RPC调用。   定义模型、接口和服务器端代码 |---Model    &nb</div> </li> <li><a href="/article/1716.htm" title="【Mahout三】基于Mahout CBayes算法的20newsgroup流程分析" target="_blank">【Mahout三】基于Mahout CBayes算法的20newsgroup流程分析</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a> <div>1.Mahout环境搭建  1.下载Mahout http://mirror.bit.edu.cn/apache/mahout/0.10.0/mahout-distribution-0.10.0.tar.gz    2.解压Mahout  3. 配置环境变量 vim /etc/profile export HADOOP_HOME=/home</div> </li> <li><a href="/article/1843.htm" title="nginx负载tomcat遇非80时的转发问题" target="_blank">nginx负载tomcat遇非80时的转发问题</a> <span class="text-muted">ronin47</span> <div>  nginx负载后端容器是tomcat(其它容器如WAS,JBOSS暂没发现这个问题)非80端口,遇到跳转异常问题。解决的思路是:$host:port        详细如下:    该问题是最先发现的,由于之前对nginx不是特别的熟悉所以该问题是个入门级别的: ? 1 2 3 4 5 </div> </li> <li><a href="/article/1970.htm" title="java-17-在一个字符串中找到第一个只出现一次的字符" target="_blank">java-17-在一个字符串中找到第一个只出现一次的字符</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class FirstShowOnlyOnceElement { /**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b * 1.int[] count:count[i]表示i对应字符出现的次数 * 2.将26个英文字母映射:a-z <--> 0-25 * 3.假设全部字母都是小写 */ pu</div> </li> <li><a href="/article/2097.htm" title="mongoDB 复制集" target="_blank">mongoDB 复制集</a> <span class="text-muted">开窍的石头</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>mongo的复制集就像mysql的主从数据库,当你往其中的主复制集(primary)写数据的时候,副复制集(secondary)会自动同步主复制集(Primary)的数据,当主复制集挂掉以后其中的一个副复制集会自动成为主复制集。提供服务器的可用性。和防止当机问题             mo</div> </li> <li><a href="/article/2224.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/2351.htm" title="Git忽略文件" target="_blank">Git忽略文件</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>     有很多文件不必使用git管理。例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等。使用git status时,会在Untracked files里面看到这些文件列表,在一次需要添加的文件比较多时(使用git add . / git add -u),会把这些所有的未跟踪文件添加进索引。 ==== ==== ==== 一些牢骚</div> </li> <li><a href="/article/2478.htm" title="MySQL连接数据库的必须配置" target="_blank">MySQL连接数据库的必须配置</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE/1.htm">连接数据库配置</a> <div>MySQL连接数据库的必须配置   1.driverClass:com.mysql.jdbc.Driver   2.jdbcUrl:jdbc:mysql://localhost:3306/dbname   3.user:username   4.password:password   其中1是驱动名;2是url,这里的‘dbna</div> </li> <li><a href="/article/2605.htm" title="一生要养成的60个习惯" target="_blank">一生要养成的60个习惯</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E4%B9%A0%E6%83%AF/1.htm">习惯</a> <div>一生要养成的60个习惯 第1篇 让你更受大家欢迎的习惯 1 守时,不准时赴约,让别人等,会失去很多机会。 如何做到: ①该起床时就起床, ②养成任何事情都提前15分钟的习惯。 ③带本可以随时阅读的书,如果早了就拿出来读读。 ④有条理,生活没条理最容易耽误时间。 ⑤提前计划:将重要和不重要的事情岔开。 ⑥今天就准备好明天要穿的衣服。 ⑦按时睡觉,这会让按时起床更容易。 2 注重</div> </li> <li><a href="/article/2732.htm" title="[介绍]Yii 是什么" target="_blank">[介绍]Yii 是什么</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 易)在中文里有“极致简单与不断演变”两重含义,也可看作 Yes It Is! 的缩写。 Yii 最适合做什么? Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 PHP 构建的 Web 应用。因为基于组件的框架结构和设计精巧的缓存支持,它特别适合开发大型应</div> </li> <li><a href="/article/2859.htm" title="Linux SSH常用总结" target="_blank">Linux SSH常用总结</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux+ssh/1.htm">linux ssh</a><a class="tag" taget="_blank" href="/search/SSHD/1.htm">SSHD</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2186931 一、连接到远程主机   格式: ssh name@remoteserver 例如: ssh ickes@192.168.27.211   二、连接到远程主机指定的端口   格式: ssh name@remoteserver -p 22 例如: ssh i</div> </li> <li><a href="/article/2986.htm" title="快速上传头像到服务端工具类FaceUtil" target="_blank">快速上传头像到服务端工具类FaceUtil</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>快速迭代用 import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio</div> </li> <li><a href="/article/3113.htm" title="jQuery入门之怎么使用" target="_blank">jQuery入门之怎么使用</a> <span class="text-muted">ini</span> <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/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>jQuery的强大我何问起(个人主页:hovertree.com)就不用多说了,那么怎么使用jQuery呢?   首先,下载jquery。下载地址:http://hovertree.com/hvtart/bjae/b8627323101a4994.htm,一个是压缩版本,一个是未压缩版本,如果在开发测试阶段,可以使用未压缩版本,实际应用一般使用压缩版本(min)。然后就在页面上引用。</div> </li> <li><a href="/article/3240.htm" title="带filter的hbase查询优化" target="_blank">带filter的hbase查询优化</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/%E6%9F%A5%E8%AF%A2%E4%BC%98%E5%8C%96/1.htm">查询优化</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a><a class="tag" taget="_blank" href="/search/RandomRowFilter/1.htm">RandomRowFilter</a> <div> 问题描述 hbase scan数据缓慢,server端出现LeaseException。hbase写入缓慢。   问题原因 直接原因是: hbase client端每次和regionserver交互的时候,都会在服务器端生成一个Lease,Lease的有效期由参数hbase.regionserver.lease.period确定。如果hbase scan需</div> </li> <li><a href="/article/3367.htm" title="java设计模式-单例模式" target="_blank">java设计模式-单例模式</a> <span class="text-muted">men4661273</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a><a class="tag" taget="_blank" href="/search/%E5%8F%8D%E5%B0%84/1.htm">反射</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a> <div>         单例模式1,饿汉模式 //饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { //私有的默认构造函数 private Singleton1() {} //已经自行实例化 private static final Singleton1 singl</div> </li> <li><a href="/article/3494.htm" title="mongodb 查询某一天所有信息的3种方法,根据日期查询" target="_blank">mongodb 查询某一天所有信息的3种方法,根据日期查询</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a> <div>// mongodb的查询真让人难以琢磨,就查询单天信息,都需要花费一番功夫才行。 // 第一种方式: coll.aggregate([ {$project:{sendDate: {$substr: ['$sendTime', 0, 10]}, sendTime: 1, content:1}}, {$match:{sendDate: '2015-</div> </li> <li><a href="/article/3621.htm" title="二维数组转换成JSON" target="_blank">二维数组转换成JSON</a> <span class="text-muted">tangqi609567707</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a> <div>原文出处:http://blog.csdn.net/springsen/article/details/7833596 public class Demo {     public static void main(String[] args) {        String[][] blogL</div> </li> <li><a href="/article/3748.htm" title="erlang supervisor" target="_blank">erlang supervisor</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>定义supervisor时,如果是监控celuesimple_one_for_one则删除children的时候就用supervisor:terminate_child (SupModuleName, ChildPid),如果shutdown策略选择的是brutal_kill,那么supervisor会调用exit(ChildPid, kill),这样的话如果Child的behavior是gen_</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>