1. 使用引用符来格式化HTML代码。

 @Component({
selector: 'app-heroes',
templateUrl: './heroes.component.html',
styleUrls: ['./heroes.component.css']
})

2. 数据双向绑定方式。

在使用表单输入绑定数据之前,我们需要引入表单模块FormsModule包至我们的Angular模块中。引入包的方法是,直接添加需要的包至NgModelimports数组中。

 import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component';
import { HeroesComponent } from './heroes/heroes.component'; @NgModule({
declarations: [
AppComponent,
HeroesComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

表单中写法:

 <input [(ngModel)]="hero.name" placeholder="name">

3.使用自定义对象数组

 const HEROES: Hero[] = [
   {id: 11, name: 'Mr.Nice'},
{id: 12, name: 'Narco'},
{id: 13, name: 'Bombasto'},
{id: 14, name: 'Celeritas'},
{id: 15, name: 'Magneta'},
{id: 16, name: 'RubberMan'},
{id: 17, name: 'Dynama'},
{id: 18, name: 'Dr IQ'},
{id: 19, name: 'Magma'},
{id: 20, name: 'Tornado'}
];

4.使用列表li

 <li *ngFor="let hero of heroes">
<span class="badge">{{hero.id}}</span>
{{hero.name}}
</li>

5.为组件添加样式

 @Component({
selector: 'my-app',
template: ``,
styles: [`
.selected {
background-color: #CFD8DC;
color:white;
}
.heroes {
margin: 0 0 2em 0;
list-style-type: none;
padding: 0;
width: 15em;
}
`]
}]

6.定义变量

与Java/C++定义变量的类型写在前面不同的时,TypeScript的定义方式为

变量名:类型

 selectedHero:Hero;

7.定义方法

必须定义返回类型

 onSelect(hero: Hero): void {
this.selectedHero = hero;
}

8.使用结构指令

直接使用某个可能为空的变量,会导致异常抛出,需要使用if结构进行判断。angular中有一种名为结构指令(structural directives)可以改变DOM的结构。这类的指令有ngIfngFor。用法如下:

 <div *ngIf="selectedHero">
<h2>{{selectedHero.name}} details!</h2>
<div><label>id:</label>{{selectedHero.id}}</div>
<div><label>name:</label>{{selectedHero.name}}</div>
</div>

9.改变组件的CSS样式类

[class.className]=true/false

key为样式的类名,value为true或者false.应用:已选择的项添加已选择样式。未选择的项消除已选择样式

 <li *ngFor="let hero of heroes" (click)="onSelect(hero)" [class.selected]="hero === selectedHero">
<span class="badge">{{hero.id}}</span>
{{hero.name}}
</li>

10.引入类

 import { Hero } from './hero';

11.使用服务Service

使用@Injectable修饰类

import {Injectable} from '@angular/core';

import {HEROES} from "./mock-heroes";
import {Hero} from "./hero"; @Injectable()
export class HeroServie {
getHeroes(): Hero[] {
return HEROES
} }

如何在组件中使用这个服务?传统的方式会使用new关键字去实例化。但官方不建议这么做,有以下几点理由:

  • 当服务类的构造方法改变时,我们必须要修改每一处使用到它的代码

  • 如果需要缓存对象的状态,每次都new是做不到的。

  • 在代码中写死new类来实例化,将无法替换其实现。比如,测试环境和生产环境的服务可能不同,当要切换不同版本是比较麻烦的。

官方推荐使用注入来使用服务。为组件添加providers元数据。

 providers: [HeroServie],

组件的构造方法改为:

 constructor(private  heroService: HeroServie) {
this.heroes = heroService.getHeroes();
}

12.使用ngOnInit生命周期回调接口

angular提供了一系统的接口监控组件的生命周期各个环节。

 import { OnInit } from '@angular/core';

 export class AppComponent implements OnInit {

   ngOnInit(): void {

     // somthing to be done

   }

 }

13. 使用Promise解决回调的问题

服务有时候是耗时的操作,如果直接调用可能会阻塞UI,使用Promise可以解决这个问题。

 @Injectable()
export class HeroServie {
getHeroes(): Promise<Hero[]> {
return Promise.resolve(HEROES);
} }
 private getHeroes() : void {
this.heroService.getHeroes().then(heroes => this.heroes = heroes);
}

14.使用路由Routing

路由配置文件写法

import {Routes, RouterModule} from "@angular/router";
import {ModuleWithProviders} from "@angular/core";
import {HeroesComponent} from "./heroes.component"; const appRoutes: Routes = [{
path: 'heroes',
component: HeroesComponent
}]; export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

模板中使用

 <a routerLink="/heroes">Heroes</a>
<router-outlet></router-outlet>

routerLink指令告知路由器点击跳转至哪个地址,<router-outlet></router-outlet>表示路由出口,即要把组件(routerLink指向的组件)加载在哪个位置.

15.使用templateUrl代替template

 @Component({
selector: 'my-dashboard',
templateUrl: 'app/dashboard.component.html'
})

16.按下标显示数组中的指定记录

 this.heroService.getHeroes().then(heroes=>this.heroes = heroes.slice(1, 5));

17.参数化路由

路由配置:id为参数

 {
path: 'detail/:id',
component: HeroDetailComponent
}

获取参数:

 export class HeroDetailComponent implements OnInit {
ngOnInit(): void {
this.route.params.forEach((params: Params)=> {
let id = +params['id']; //加号的作用是将字符串参数转化为数字
this.heroService.getHero(id).then(hero => this.hero = hero);
});
} constructor(private heroService: HeroServie,
private route: ActivatedRoute) { } @Input()
hero: Hero; }

18.代码中转向

 gotoDetail(hero: Hero): void {
let link = ['/detail', hero.id];
this.router.navigator(link);
}

19. 使用内在Web API模拟HTTP服务

内存数据模拟数据库数据。

 InMemoryWebApiModule.forRoot(InMemoryDataService),

service实现

 import {InMemoryDbService} from "angular2-in-memory-web-api";

 export class InMemoryDataService implements InMemoryDbService {
createDb(): {} {
let heroes = [
{id: 11, name: 'Mr. Nice'},
{id: 12, name: 'Narco'},
{id: 13, name: 'Bombasto'},
{id: 14, name: 'Celeritas'},
{id: 15, name: 'Magneta'},
{id: 16, name: 'RubberMan'},
{id: 17, name: 'Dynama'},
{id: 18, name: 'Dr IQ'},
{id: 19, name: 'Magma'},
{id: 20, name: 'Tornado'}
]
return heroes;
} }

HTTP请求示例

 getHeroes(): Promise<Hero[]> {
return this.http
.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data as Hero[]) // 转换类型
.catch(this.handleError)
}

20.使用HTTP Promise

Angular的http.get返回的是Observable,Observables是一个强大的管理异步数据流的方式。

当我们使用toPromise方法将Observables转化为Promise后,操作就像操作普通的Promise一样。使用toPromise方法需要引入外部方法

 import 'rxjs/add/operator/toPromise';

21.HTTP请求异常处理

 .catch(this.handleError);
 private handleError(error: any): Promise<any> {

   console.error('An error occurred', error); // for demo purposes only

   return Promise.reject(error.message || error);

 }

angular体系

angular体系主要包括:模块Module,组件Component,模板Template,元数据Metadata,数据绑定Data Banding,服务Service,指令,依赖注入

  1. 模块是ES6标准之一,每个模块目的性非常单一。在Angular中,一般模块输出的都是一个组件类,需要配合import来加载模块。

    有一类模块是Angular本身定义好的,即库模块,当加载angular2/core模块时,可以调用一个核心类库。库模块入要有angular/core(核心类库),angular/http(网络请求相关),angular2/router(路由相关),angular2/common(表单、指令等)

     总结  -   Angular应用由模块组成
    
          - 模块输出可以是:类、函数、值或其他模块
  1. 组件是为了控制显示把HTML模板及样式。一般,每个组件都配有一个类,用来定义业务能力。通过类的属性和方法与视图进行交互。

  2. 模板是为了告知Angular如何去渲染组件。Angular模板有其特殊的语法。

  3. 元数据是告知Angular如何处理一个类。一个类如果没有元数据的声明,就是一个无法单独运行的普通的类。可以使用注解来定义类的元数据。如@Component,注解中可以带上一些参数:

     - selector - CSS选择器
    
     - templateUrl - 的模板地址
    
     - directives - 指令或组件数组
    
     - providers - 注册的Service服务数组,从而在组件类构造函数中能够正确的实例化这些服务

    除了@Component外,还有Injectable,@Input,@Output,@RouterConfig元数据。

    1. 数据绑定是一种协调组件与模板之间的通信机制,通过HTML元素来描述采用哪种数据绑定形式。数据绑定包括属性绑定[hero]、事件绑定(click)、双向绑定[(ngModel)]="hero.name"

    2. 指令。一个指令是由元数据和一个类组成,使用元数据注解@Directive修饰就是一个指令。指令和组件的功能类似,他们的区别是指令侧重对HTML元素功能的扩展。而组件是一个具体一的业务。指令分为结构性指令如*ngFor,*ngIf等和属性指令,如[(ngModel)]

    3. 服务。模块中需要使用到的值、函数都可以是服务Service。服务通常 是一个目的性非常明确的类。如日志Service,数据Service,应用程序配置信息,工资计算器等 。

      组件是是服务的最大消费者,组件都是靠服务来处理大部分事务,组件不会直接从服务器获取数据、不验证用户输入,都是委派验服务来完成。一般我们遵循的原则是:把应用程序逻辑转化成服务 ,并通过依赖注入提供组件来消费服务。

    4. 依赖注入。依赖注入是一种对类实例的新方法。我们可以在引导应用程序启动时实例一个服务如

       bootstrap(AppComponent, [BackendService, HeroService, Logger]);

      或者在组件级别里注册服务

       @Component({
      providers: [HeroService]
      })
      export class HeroesComponent { ... }
Angular2入门导向笔记
2016年09月13日 16:55:20

阅读数:1753

1. 使用引用符来格式化HTML代码。

@Component({
selector: 'my-app',
template: `<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id:</label>{{hero.id}}</div>
<div><label>name:</label>{{hero.name}}</div>`
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 数据双向绑定方式

在使用表单输入绑定数据之前,我们需要引入表单模块FormsModule包至我们的Angular模块中。引入包的方法是,直接添加需要的包至NgModelimports数组中。

import {NgModule}      from '@angular/core';
import {BrowserModule} from '@angular/platform-browser'; import {AppComponent} from './app.component';
import {FormsModule} from "@angular/forms"; @NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

表单中写法:

<input [(ngModel)]="hero.name" placeholder="name">
  • 1

3.使用自定义对象数组

const HEROES: Hero[] = [
{id: 11, name: 'Mr.Nice'},
{id: 12, name: 'Narco'},
{id: 13, name: 'Bombasto'},
{id: 14, name: 'Celeritas'},
{id: 15, name: 'Magneta'},
{id: 16, name: 'RubberMan'},
{id: 17, name: 'Dynama'},
{id: 18, name: 'Dr IQ'},
{id: 19, name: 'Magma'},
{id: 20, name: 'Tornado'}
];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4.使用列表li

<li *ngFor="let hero of heroes">
<span class="badge">{{hero.id}}</span>
{{hero.name}}
</li>
  • 1
  • 2
  • 3
  • 4

5.为组件添加样式

@Component({
selector: 'my-app',
template: ``,
styles: [`
.selected {
background-color: #CFD8DC;
color:white;
}
.heroes {
margin: 0 0 2em 0;
list-style-type: none;
padding: 0;
width: 15em;
}
`]
}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

6.定义变量

与Java/C++定义变量的类型写在前面不同的时,TypeScript的定义方式为

变量名:类型

selectedHero:Hero;
  • 1

7.定义方法

必须定义返回类型

onSelect(hero: Hero): void {
this.selectedHero = hero;
}
  • 1
  • 2
  • 3

8.使用结构指令

直接使用某个可能为空的变量,会导致异常抛出,需要使用if结构进行判断。angular中有一种名为结构指令(structural directives)可以改变DOM的结构。这类的指令有ngIfngFor。用法如下:

<div *ngIf="selectedHero">
<h2>{{selectedHero.name}} details!</h2>
<div><label>id:</label>{{selectedHero.id}}</div>
<div><label>name:</label>{{selectedHero.name}}</div>
</div>
  • 1
  • 2
  • 3
  • 4
  • 5

9.改变组件的CSS样式类

[class.className]=true/false

key为样式的类名,value为true或者false.应用:已选择的项添加已选择样式。未选择的项消除已选择样式。

<li *ngFor="let hero of heroes" (click)="onSelect(hero)" [class.selected]="hero === selectedHero">
<span class="badge">{{hero.id}}</span>
{{hero.name}}
</li>
  • 1
  • 2
  • 3
  • 4

10.引入类

import { Hero } from './hero';
  • 1

11.使用服务Service

使用@Injectable修饰类

import {Injectable} from '@angular/core';

import {HEROES} from "./mock-heroes";
import {Hero} from "./hero"; @Injectable()
export class HeroServie {
getHeroes(): Hero[] {
return HEROES
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如何在组件中使用这个服务?传统的方式会使用new关键字去实例化。但官方不建议这么做,有以下几点理由:

  • 当服务类的构造方法改变时,我们必须要修改每一处使用到它的代码

  • 如果需要缓存对象的状态,每次都new是做不到的。

  • 在代码中写死new类来实例化,将无法替换其实现。比如,测试环境和生产环境的服务可能不同,当要切换不同版本是比较麻烦的。

官方推荐使用注入来使用服务。为组件添加providers元数据。

providers: [HeroServie],
  • 1

组件的构造方法改为:

constructor(private  heroService: HeroServie) {
this.heroes = heroService.getHeroes();
}
  • 1
  • 2
  • 3

12.使用ngOnInit生命周期回调接口

angular提供了一系统的接口监控组件的生命周期各个环节。

import { OnInit } from '@angular/core';

export class AppComponent implements OnInit {

  ngOnInit(): void {

    // somthing to be done

  }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

13. 使用Promise解决回调的问题

服务有时候是耗时的操作,如果直接调用可能会阻塞UI,使用Promise可以解决这个问题。

@Injectable()
export class HeroServie {
getHeroes(): Promise<Hero[]> {
return Promise.resolve(HEROES);
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
private getHeroes() : void {
this.heroService.getHeroes().then(heroes => this.heroes = heroes);
}
  • 1
  • 2
  • 3

14.使用路由Routing

路由配置文件写法

import {Routes, RouterModule} from "@angular/router";
import {ModuleWithProviders} from "@angular/core";
import {HeroesComponent} from "./heroes.component"; const appRoutes: Routes = [{
path: 'heroes',
component: HeroesComponent
}]; export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

模板中使用

<a routerLink="/heroes">Heroes</a>
<router-outlet></router-outlet>
  • 1
  • 2

routerLink指令告知路由器点击跳转至哪个地址,<router-outlet></router-outlet>表示路由出口,即要把组件(routerLink指向的组件)加载在哪个位置.

15.使用templateUrl代替template

@Component({
selector: 'my-dashboard',
templateUrl: 'app/dashboard.component.html'
})
  • 1
  • 2
  • 3
  • 4

16.按下标显示数组中的指定记录

this.heroService.getHeroes().then(heroes=>this.heroes = heroes.slice(1, 5));
  • 1

17.参数化路由

路由配置:id为参数

{
path: 'detail/:id',
component: HeroDetailComponent
}
  • 1
  • 2
  • 3
  • 4

获取参数:

export class HeroDetailComponent implements OnInit {
ngOnInit(): void {
this.route.params.forEach((params: Params)=> {
let id = +params['id']; //加号的作用是将字符串参数转化为数字
this.heroService.getHero(id).then(hero => this.hero = hero);
});
} constructor(private heroService: HeroServie,
private route: ActivatedRoute) { } @Input()
hero: Hero; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

18.代码中转向

gotoDetail(hero: Hero): void {
let link = ['/detail', hero.id];
this.router.navigator(link);
}
  • 1
  • 2
  • 3
  • 4

19. 使用内在Web API模拟HTTP服务

内存数据模拟数据库数据。

InMemoryWebApiModule.forRoot(InMemoryDataService),
  • 1

service实现

import {InMemoryDbService} from "angular2-in-memory-web-api";

export class InMemoryDataService implements InMemoryDbService {
createDb(): {} {
let heroes = [
{id: 11, name: 'Mr. Nice'},
{id: 12, name: 'Narco'},
{id: 13, name: 'Bombasto'},
{id: 14, name: 'Celeritas'},
{id: 15, name: 'Magneta'},
{id: 16, name: 'RubberMan'},
{id: 17, name: 'Dynama'},
{id: 18, name: 'Dr IQ'},
{id: 19, name: 'Magma'},
{id: 20, name: 'Tornado'}
]
return heroes;
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

HTTP请求示例

getHeroes(): Promise<Hero[]> {
return this.http
.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data as Hero[]) // 转换类型
.catch(this.handleError)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

20.使用HTTP Promise

Angular的http.get返回的是Observable,Observables是一个强大的管理异步数据流的方式。

当我们使用toPromise方法将Observables转化为Promise后,操作就像操作普通的Promise一样。使用toPromise方法需要引入外部方法。

import 'rxjs/add/operator/toPromise';
  • 1
  • 2

21.HTTP请求异常处理

.catch(this.handleError);
  • 1
  • 2
private handleError(error: any): Promise<any> {

  console.error('An error occurred', error); // for demo purposes only

  return Promise.reject(error.message || error);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

angular体系

angular体系主要包括:模块Module,组件Component,模板Template,元数据Metadata,数据绑定Data Banding,服务Service,指令,依赖注入

  1. 模块是ES6标准之一,每个模块目的性非常单一。在Angular中,一般模块输出的都是一个组件类,需要配合import来加载模块。

    有一类模块是Angular本身定义好的,即库模块,当加载angular2/core模块时,可以调用一个核心类库。库模块入要有angular/core(核心类库),angular/http(网络请求相关),angular2/router(路由相关),angular2/common(表单、指令等)

- Angular应用由模块组成

- 模块输出可以是:类、函数、值或其他模块
  • 1
  • 2
  • 3
  1. 组件是为了控制显示把HTML模板及样式。一般,每个组件都配有一个类,用来定义业务能力。通过类的属性和方法与视图进行交互。

  2. 模板是为了告知Angular如何去渲染组件。Angular模板有其特殊的语法。

  3. 元数据是告知Angular如何处理一个类。一个类如果没有元数据的声明,就是一个无法单独运行的普通的类。可以使用注解来定义类的元数据。如@Component,注解中可以带上一些参数:

- selector - CSS选择器

- templateUrl - 的模板地址

- directives - 指令或组件数组

- providers - 注册的Service服务数组,从而在组件类构造函数中能够正确的实例化这些服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

除了@Component外,还有Injectable,@Input,@Output,@RouterConfig元数据。

  1. 数据绑定是一种协调组件与模板之间的通信机制,通过HTML元素来描述采用哪种数据绑定形式。数据绑定包括属性绑定[hero]、事件绑定(click)、双向绑定[(ngModel)]="hero.name"

  2. 指令。一个指令是由元数据和一个类组成,使用元数据注解@Directive修饰就是一个指令。指令和组件的功能类似,他们的区别是指令侧重对HTML元素功能的扩展。而组件是一个具体一的业务。指令分为结构性指令如*ngFor,*ngIf等和属性指令,如[(ngModel)]

  3. 服务。模块中需要使用到的值、函数都可以是服务Service。服务通常 是一个目的性非常明确的类。如日志Service,数据Service,应用程序配置信息,工资计算器等 。

    组件是是服务的最大消费者,组件都是靠服务来处理大部分事务,组件不会直接从服务器获取数据、不验证用户输入,都是委派验服务来完成。一般我们遵循的原则是:把应用程序逻辑转化成服务 ,并通过依赖注入提供组件来消费服务。

  4. 依赖注入。依赖注入是一种对类实例的新方法。我们可以在引导应用程序启动时实例一个服务如

bootstrap(AppComponent, [BackendService, HeroService, Logger]);
  • 1

或者在组件级别里注册服务

@Component({
providers: [HeroService]
})
export class HeroesComponent { ... }
  • 1
  • 2
  • 3
  • 4
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/joson793847469/article/details/52527454

Angular2、4入门基础知识(小的概念)的更多相关文章

  1. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  2. Linux入门基础知识

    注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. Linux入门基础知识 1. Unix和Linux发展历史 二者就像父子关系,当然Unix是老爹.1965年,MI ...

  3. React Native 入门基础知识总结

    中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...

  4. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  5. java基础知识小小结

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  6. USB入门基础知识(转)

    源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...

  7. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  8. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  9. React入门---基础知识-大纲-1

    -----------------在慕课网学习react入门笔记-------------- ---------博主边学边记录,手把手进行学习及记录---------- --------------- ...

  10. PHP基础入门(二)---入门基础知识必备

    前言 在上一章中,我们初步了解了PHP的网页基础和PHP的入门基础,今天继续给大家分享更多有关PHP的知识. 理论知识看起来可能比较枯燥一些,但是我们的实践(敲代码)毕竟离不开它. 只有理论与实践相结 ...

随机推荐

  1. 让函数的input、output更"函数化"

    前言 我们都知道函数的基本形式为:output f(input),且先按这种形式进行input与output的分析,我们的input与output可以有更好的设计方式,而我们的output是选择使用r ...

  2. win10 cmd 替换 powershell

    打开注册表编辑器,定位至: \HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell\command cmd:  cmd.exe /s /k p ...

  3. sql的几种常用锁简述

    比较全的文章地址保存下:http://www.cnblogs.com/knowledgesea/p/3714417.html SELECT * FROM dbo.AASELECT * FROM dbo ...

  4. shell read line

    cat >b <<EOF line1 line2 line3 EOF # 方法1 while read line do echo ${line} done < <(cat ...

  5. docker(3)docker下的centos7下安装jdk

    1.将jdk-8u65-linux-x64.tar.gz文件传到docker的宿主机上 rz 2.将宿主机上的jdk-8u65-linux-x64.tar.gz复制到centos7的容器下 #在宿主机 ...

  6. vue(6)生态

    来自:https://www.jianshu.com/p/22a99426b524?utm_campaign=maleskine&utm_content=note&utm_medium ...

  7. Dev Express Report 学习总结(二)关于如何使用Grouping分组

    对于所有的报表工具来说,基本上所有Grouping功能的都很相似.正如前面说到的,Group处于Page Header和Page Footer之间,同时又将Detail包括与其中. 下面还是通过一个例 ...

  8. SQL datetime和smalldatetime区别

    datetime 存储大小8个字节,精确到分后的3为小数,日期范围从1753 年 1 月 1 日到 9999 年 12 月 31 日:而 smalldatetime存储大小为4个字节,精确到分,日期范 ...

  9. 2019.03.21 读书笔记 枚举ENUM

    其实没必要为枚举显式赋值,如果赋值了,就一定要全部赋值,否则默认在上一个元素的基础上+1,如果不给枚举变量赋值,就算枚举中没有0元素,也会显示为0,而超出枚举范围的整型数据,也会显示值本身,而不是异常 ...

  10. (转)AIX下的MPIO、RDAC、SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系)

    AIX下的MPIO.RDAC.SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系) 原文:http://blog.163.com/huangbao_007 ...