Angular 使用教程——基本语法和双向数据绑定

Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用

Angular 是一个基于 TypeScript 构建的开发平台。它包括:一个基于组件的框架,用于构建可伸缩的 Web 应用,一组完美集成的库,涵盖各种功能,包括路由、表单管理、客户端-服务器通信等,一套开发工具,可帮助你开发、构建、测试和更新代码。借助 Angular,无论单人项目还是企业级应用,你都能获得平台带来的优势。Angular 的设计目标之一就是让更新更容易,因此你可以用最小的成本升级到最新的 Angular 版本

Angular诞生历史,AngularJS诞生于2009年,由Misko Hevery 等人创建,是一款构建用户界面的前端框架,后为Google收购。AngularJS是一个应用设计框架与开发平台,用于创建高效、复杂、精致的单页面应用,通过新的属性和表达式扩展了 HTML,实现一套框架,多种平台,移动端和桌面端。AngularJS有着诸多特性,最为核心的是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。Angular是AngularJS的重写,Angular2以后官方命名为Angular,2.0以前版本称为AngularJS。AngularJS是用JavaScript编写,而Angular采用TypeScript语言编写,是ECMAScript 6的超集

Angular官网:https://angular.cn/

目录

1、创建 Angular 项目

2、点击事件

3、if 语句

3.1、if 形式

3.2、if else 形式

3.3、angular 17 @if 形式

4、for 语句

4.1、*ngFor 形式

4.2、angular 17 @for 形式

5、switch 语句

5.1、ngSwitch 形式

5.2、angular 17 @switch 形式

6、双向数据绑定


1、创建 Angular 项目

Angular 和 Node 版本关系

Angular 需要 Node.js 的活跃 LTS 版或维护期 LTS 版

笔者使用的 node 版本是 20.9.0

安装 Angular CLI 

如果已经安装过Angular CLI ,可以跳过

npm install -g @angular/cli

创建项目

在新的文件目录下执行下面创建项目命令

ng new angular-learn

笔者新建的项目名为 angular-learn

创建完成

使用 vs code 打开项目代码

笔者创建的 Angular 版本是17

项目结构

运行项目

npm run start

浏览器访问:http://localhost:4200

项目创建成功

2、点击事件

先将 app.component.html 文件内容清空,只保留<router-outlet></router-outlet>

在 app.component.html 中添加button标签,并按下面代码添加点击事件

<button (click)="add()">添加</button>
<router-outlet></router-outlet>

然后在 app.component.ts 文件中写add 事件内容

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
}

运行效果

获取事件本身

app.component.html 


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>
<router-outlet></router-outlet>

app.component.ts 

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }
}

运行效果

3、if 语句

3.1、if 形式

在 app.component.ts 中定义变量 isPoetry

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }

  isPoetry:boolean = true
}

app.component.html 中写 if 判断


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>

<router-outlet></router-outlet>

运行效果

3.2、if else 形式

app.component.ts

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }

  isPoetry:boolean = true
  isPoetry2:boolean = true

  changePoetry() {
    this.isPoetry2 = false
  }
}

app.component.html


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<router-outlet></router-outlet>

运行效果

3.3、angular 17 @if 形式


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<router-outlet></router-outlet>

运行效果

4、for 语句

4.1、*ngFor 形式

app.component.ts

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }

  isPoetry:boolean = true
  isPoetry2:boolean = true

  changePoetry() {
    this.isPoetry2 = false
  }

  // 定义数组
  poetrys:Array<string> = [
    '死生契阔,与子成说',
    '执子之手,与子偕老',
    '我心匪石,不可转也',
    '有一美人兮,见之不忘'
  ]
}

app.component.html


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<!-- for 语句 -->
<p *ngFor="let poetry of poetrys let i = index">
    {{i+1}}、{{poetry}}
</p>
<router-outlet></router-outlet>

运行效果

4.2、angular 17 @for 形式


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<!-- for 语句 -->
<p *ngFor="let poetry of poetrys let i = index">
    {{i+1}}、{{poetry}}
</p>

<!-- angular 17 @for 语句 -->
@for (item of poetrys; track item) {
    <div>{{item}}</div>
} @empty {
    Empty list of poetrys
}
  
@for (item of poetrys; track $index) {
    <p>{{$index+1}}、{{item}}</p>
}
<router-outlet></router-outlet>

5、switch 语句

5.1、ngSwitch 形式

app.component.ts

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }

  isPoetry:boolean = true
  isPoetry2:boolean = true

  changePoetry() {
    this.isPoetry2 = false
  }

  // 定义数组
  poetrys:Array<string> = [
    '死生契阔,与子成说',
    '执子之手,与子偕老',
    '我心匪石,不可转也',
    '有一美人兮,见之不忘'
  ]

  author:number = 2
  changAuthor() {
    this.author = 3
  }
}

app.component.html


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<!-- for 语句 -->
<p *ngFor="let poetry of poetrys let i = index">
    {{i+1}}、{{poetry}}
</p>

<!-- angular 17 @for 语句 -->
@for (item of poetrys; track item) {
    <div>{{item}}</div>
} @empty {
    Empty list of poetrys
}
  
@for (item of poetrys; track $index) {
    <p>{{$index+1}}、{{item}}</p>
}

<button (click)="changAuthor()">修改作者</button>
<!-- angular switch语法 -->
<div [ngSwitch]="author">
    <p *ngSwitchCase="1">
        青天有月来几时 我今停杯一问之
    </p>
    <p *ngSwitchCase="2">
        明月几时有,把酒问青天
    </p>
    <p *ngSwitchDefault>
        江畔何人初见月,江月何年初照人
    </p>
</div>
<router-outlet></router-outlet>

运行效果

5.2、angular 17 @switch 形式

app.component.html


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<!-- for 语句 -->
<p *ngFor="let poetry of poetrys let i = index">
    {{i+1}}、{{poetry}}
</p>

<!-- angular 17 @for 语句 -->
@for (item of poetrys; track item) {
    <div>{{item}}</div>
} @empty {
    Empty list of poetrys
}
  
@for (item of poetrys; track $index) {
    <p>{{$index+1}}、{{item}}</p>
}

<button (click)="changAuthor()">修改作者</button>
<!-- angular switch语法 -->
<div [ngSwitch]="author">
    <p *ngSwitchCase="1">
        青天有月来几时 我今停杯一问之
    </p>
    <p *ngSwitchCase="2">
        明月几时有,把酒问青天
    </p>
    <p *ngSwitchDefault>
        江畔何人初见月,江月何年初照人
    </p>
</div>

<!-- angular17 switch -->
@switch (author) {
    @case (1) {
        <p>若非群玉山头见 会向瑶台月下逢</p>
    }
    @case (2) {
        <p>春宵一刻值千值千金,花有清香月有阴</p>
    }
    @default {
        <p>情催桃李艳,心寄管弦飞</p>
    }
}
<router-outlet></router-outlet>

运行效果

6、双向数据绑定

想要实现双向数据绑定,需要引入angular 内置的 FormsModule 模块

在 app.component.ts 文件中引入

import { FormsModule } from '@angular/forms';

并在 @Component 的 import 中添加 FormsModule

app.component.ts

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import { FormsModule } from '@angular/forms';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet, FormsModule],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular-learn';
  add() {
    alert('晓看天色暮看云,行也思君,坐也思君')
  }
  add2(e:MouseEvent) {
    console.log(e);
  }

  isPoetry:boolean = true
  isPoetry2:boolean = true

  changePoetry() {
    this.isPoetry2 = false
  }

  // 定义数组
  poetrys:Array<string> = [
    '死生契阔,与子成说',
    '执子之手,与子偕老',
    '我心匪石,不可转也',
    '有一美人兮,见之不忘'
  ]

  author:number = 2
  changAuthor() {
    this.author = 3
  }

  poetryContent:string = '彼采葛兮,一日不见,如三月兮'

}

app.component.html


<button (click)="add()">添加</button>
<button (click)="add2($event)">添加2</button>

<p *ngIf="isPoetry">
    山有木兮木有枝,心悦君兮君不知
</p>
<button (click)="changePoetry()">修改isPoetry2</button>
<ng-container *ngIf="isPoetry2; else elseTemplate">
    <p>与君初相识,犹如故人归</p>
</ng-container>
<ng-template #elseTemplate>
    <p>愿我如星君如月,夜夜流光相皎洁</p>
</ng-template>

<!-- angular17 写法 -->
@if (isPoetry2) {
    <p>似此星辰非昨夜,为谁风露立中宵</p>
}
@else {
    <p>曾经沧海难为水,除却巫山不是云</p>
}

<!-- for 语句 -->
<!-- <p *ngFor="let poetry of poetrys let i = index">
    {{i+1}}、{{poetry}}
</p> -->

<!-- angular 17 @for 语句 -->
<!-- @for (item of poetrys; track item) {
    <div>{{item}}</div>
} @empty {
    Empty list of poetrys
}
  
@for (item of poetrys; track $index) {
    <p>{{$index+1}}、{{item}}</p>
} -->

<button (click)="changAuthor()">修改作者</button>
<!-- angular switch语法 -->
<div [ngSwitch]="author">
    <p *ngSwitchCase="1">
        青天有月来几时 我今停杯一问之
    </p>
    <p *ngSwitchCase="2">
        明月几时有,把酒问青天
    </p>
    <p *ngSwitchDefault>
        江畔何人初见月,江月何年初照人
    </p>
</div>

<!-- angular17 switch -->
@switch (author) {
    @case (1) {
        <p>若非群玉山头见 会向瑶台月下逢</p>
    }
    @case (2) {
        <p>春宵一刻值千值千金,花有清香月有阴</p>
    }
    @default {
        <p>情催桃李艳,心寄管弦飞</p>
    }
}

<input [(ngModel)]="poetryContent" type="text" style="width: 200px;">
{{poetryContent}}
<router-outlet></router-outlet>

运行效果

​​​​​​​

至此完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/136040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于物理的多偏置射频大信号氮化镓HEMT建模和参数提取流程

标题&#xff1a;Physics-Based Multi-Bias RF Large-Signal GaN HEMT Modeling and Parameter Extraction Flow 来源&#xff1a;JOURNAL OF THE ELECTRON DEVICES SOCIETY 摘要 本文展示了一种一致的Al镓氮化物&#xff08;AlGaN&#xff09;/氮化镓&#xff08;GaN&#x…

Python使用SQLAlchemy操作sqlite

Python使用SQLAlchemy操作sqlite sqllite1. SQLite的简介2. 在 Windows 上安装 SQLite3. 使用SQLite创建数据库3.1 命令行创建数据库3.2 navicat连接数据库 4.sqlite的数据类型存储类SQLite Affinity 类型Boolean 数据类型Date 与 Time 数据类型 5. 常用的sql语法**创建表(CREA…

No183.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

深度学习基于python+TensorFlow+Django的花朵识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 花朵识别系统&#xff0c;基于Python实现&#xff0c;深度学习卷积神经网络&#xff0c;通过TensorFlow搭建卷积神经…

No181.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Module build failed (from ./node_modules/postcss-loader/src/index.js):

出现该错误是你可能没认真看官网的安装配置&#xff0c;可直接看该目录3&#xff0c;一个字一个字看 先安装uview 如果选择v1版本&#xff0c;建议使用npm下载&#xff0c;下面以v1版本为例&#xff0c;使用的是npm下载&#xff0c;导入uview时该文件也在node_modules文件夹里…

MySQL:日志系统

目录 概述错误日志&#xff08;error log&#xff09;慢查询日志&#xff08;slow query log&#xff09;一般查询日志( general log )中继日志&#xff08;relay log&#xff09;Buffer Pool 缓存回滚日志&#xff08;undo log)概述undo log 作用undo log 的存储机制Undo log …

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

stm32控制舵机sg90

一、sg90简介 首先介绍说一下什么是舵机。舵机是一种位置&#xff08;角度&#xff09;伺服的驱动器。适用于一些需要角度不断变化的&#xff0c;可以保持的控制系统。sg90就是舵机的一种。 舵机的工作原理比较简单。舵机内部有一个基准电压&#xff0c;单片机产生的PWM信号通…

C语言证明一个偶数总能表示为两个素数之和。输入一个偶数并将其分解为两个素数

完整代码&#xff1a; // 一个偶数总能表示为两个素数之和。输入一个偶数并将其分解为两个素数#include<stdio.h>//判断一个数n是否为素数 int isPrimeNumber(int n){//1不是素数if (n1){return 0;}for (int i 2; i <(n/2); i){//当有n能被整除时&#xff0c;不是素…

【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询(二)——前端el-pagination实现

系列文章 【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询—后端实现 文章目录 系列文章系统版本实现功能实现思路后端传入的数据格式前端el-table封装axois接口引入Element-plus的el-pagination分页组件Axois 获取后台数据 系统版本 后端&#xf…

Excel中使用数据验证、OFFSET实现自动更新式下拉选项

在excel工作簿中&#xff0c;有两个Sheet工作表。 Sheet1&#xff1a; Sheet2&#xff08;数据源表&#xff09;&#xff1a; 要实现Sheet1中的“班级”内容&#xff0c;从数据源Sheet2中获取并形成下拉选项&#xff0c;且Sheet2中“班级”内容更新后&#xff0c;Sheet1中“班…

详解—搜索二叉树

一.二叉搜索树 1.1概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的…

如何安装Node.js? 创建Vue脚手架

1.进入Node.js官网&#xff0c;点击LTS版本进行下载 Node.js (nodejs.org)https://nodejs.org/en 2.然后一直【Next】即可 3.打开【cmd】,输入【node -v】注意node和-v中间的空格 查看已安装的Node.js的版本号&#xff0c;如果可以看到版本号&#xff0c;则安装成功 创建Vue脚手…

冯·诺依曼结构

一、约翰冯诺依曼---计算机之父 约翰冯诺依曼&#xff08;John von Neumann&#xff0c;1903年12月28日—1957年2月8日&#xff09;&#xff0c;出生于匈牙利布达佩斯&#xff0c;匈牙利裔美籍数学家、计算机科学家、物理学家和化学家&#xff0c;美国国家科学院院士&#xff…

Nginx:不同域名访问同一台机器的不同项目

Nginx很简单就可以解决同一台机器同时跑两个或者多个项目&#xff0c;而且都通过域名从80端口走。 以Windows环境下nginx服务为例&#xff0c;配置文件nginx.conf中&#xff0c;http中加上 include /setup/nginx-1.20.1/conf/conf.d/*.conf;删除server部分&#xff0c;完整如…

Python基础入门例程53-NP53 前10个偶数(循环语句)

最近的博文&#xff1a; Python基础入门例程52-NP52 累加数与平均值(循环语句)-CSDN博客 Python基础入门例程51-NP51 列表的最大与最小(循环语句)-CSDN博客 Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 目录 最近的博文&#xff1a; 描…

前端常用的开发工具有哪些?

目录 内置管理系统的通用场景 前后端代码生成器 权限管控 开放源码 运行性能 主流数据库 写在最后 目前使用的是JNPF框架。 前端采用Vue.js&#xff0c;这是一种流行的前端JavaScript框架&#xff0c;用于构建用户界面。Vue.js具有轻量级、可扩展性强和生态系统丰富等特点&…

解决XFCE桌面VirtualBox透明背景的问题

1 背景 笔者用的是ManjaroXFCE的组合&#xff0c;但是在使用VirtualBox时&#xff0c;会出现透明背景的问题&#xff1a; 然后发现这其实和Kvantum主题有关。下面将进行设置操作&#xff0c;去修正Kvantum相关配置修复该问题。 2 操作流程 打开Kvantum Manager&#xff1a; …

bibitem格式 添加参考文献

这次写论文时遇到一种bibitem格式的参考文献&#xff0c;latex中没有bib文件 分三步走 找到这篇文章的Bib Tex的引用&#xff0c;然后新建bib文件&#xff0c;命名为下图&#xff1a; 然后把Bib Tex引用的内容复制到上图的文件中&#xff0c;新建tex文件 内容为 \document…