Jadual Kandungan
Mula Pantas
MetaReducer
1. Tambah butang untuk peningkatan nilai tak segerak dalam templat komponen Selepas butang diklik, kaedah dilaksanakan
yang melakukan operasi tak segerak dalam kaedah 3. Tambah Tindakan
2. Teras
Rumah hujung hadapan web tutorial js Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx

Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx

May 25, 2022 am 11:01 AM
angular angular.js

Artikel ini akan memberi anda pemahaman yang mendalam tentang pengurus negeri angular, dan memperkenalkan cara menggunakan NgRx, saya harap ia akan membantu semua orang.

Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx

NgRx ialah penyelesaian seni bina Redux untuk pengurusan keadaan global dalam aplikasi Angular. [Cadangan tutorial berkaitan: "tutorial sudut"]

Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx

  • @ngrx/store: Modul pengurusan negeri global

  • @ngrx/effects: Kendalikan kesan sampingan

  • @ngrx/store-devtools: Alat nyahpepijat penyemak imbas, perlu bergantung pada Redux Devtools Extension

  • @ngrx/schematics: Alat baris perintah untuk menjana fail NgRx dengan pantas

  • @ngrx/entity: Meningkatkan kecekapan pembangun mengendalikan data dalam Reducer

  • @ngrx/router-store: Segerakkan status laluan ke Kedai global

Mula Pantas

1. Muat turun NgRx

npm install @ngrx/store @ngrx/effects @ngrx/entity @ngrx/router-store @ngrx/store-devtools @ngrx/schematics

2 Konfigurasikan NgRx CLI

ng config cli.defaultCollection @ngrx/schematics

// angular.json
"cli": {
  "defaultCollection": "@ngrx/schematics"
}
Salin selepas log masuk
<. 🎜>

3. Cipta Kedai

ng g store State --root --module app.module.ts --statePath store --stateInterface AppState

4 🎜>5. Cipta Peredam

ng g action store/actions/counter --skipTests

import { createAction } from "@ngrx/store"

export const increment = createAction("increment")
export const decrement = createAction("decrement")
Salin selepas log masuk

6 🎜>

ng g reducer store/reducers/counter --skipTests --reducers=../index.ts

7 Kelas komponen mencetuskan Tindakan dan mendapat status
import { createReducer, on } from "@ngrx/store"
import { decrement, increment } from "../actions/counter.actions"

export const counterFeatureKey = "counter"

export interface State {
  count: number
}

export const initialState: State = {
  count: 0
}

export const reducer = createReducer(
  initialState,
  on(increment, state => ({ count: state.count + 1 })),
  on(decrement, state => ({ count: state.count - 1 }))
)
Salin selepas log masuk

8

ng g selector store/selectors/counter --skipTests

Beban Tindakan
import { createFeatureSelector, createSelector } from "@ngrx/store"
import { counterFeatureKey, State } from "../reducers/counter.reducer"
import { AppState } from ".."

export const selectCounter = createFeatureSelector<AppState, State>(counterFeatureKey)
export const selectCount = createSelector(selectCounter, state => state.count)
Salin selepas log masuk

1. Lulus parameter apabila menggunakan penghantaran dalam komponen untuk mencetuskan Tindakan, dan parameter akhirnya akan diletakkan dalam objek Tindakan.

import { select, Store } from "@ngrx/store"
import { Observable } from "rxjs"
import { AppState } from "./store"
import { decrement, increment } from "./store/actions/counter.actions"
import { selectCount } from "./store/selectors/counter.selectors"

export class AppComponent {
  count: Observable<number>
  constructor(private store: Store<AppState>) {
    this.count = this.store.pipe(select(selectCount))
  }
  increment() {
    this.store.dispatch(increment())
  }
  decrement() {
    this.store.dispatch(decrement())
  }
}
Salin selepas log masuk
2. Apabila mencipta fungsi Pencipta Tindakan, dapatkan parameter dan nyatakan jenis parameter.

3. Dapatkan parameter melalui objek Action dalam Reducer.
<button (click)="increment()">+</button>
<span>{{ count | async }}</span>
<button (click)="decrement()">-</button>
Salin selepas log masuk

MetaReducer

metaReducer ialah cangkuk antara Action -> Reducer, membenarkan pembangun untuk mempraproses Action (dipanggil sebelum panggilan fungsi Reducer biasa).
this.store.dispatch(increment({ count: 5 }))
Salin selepas log masuk

import { createAction, props } from "@ngrx/store"
export const increment = createAction("increment", props<{ count: number }>())
Salin selepas log masuk
Kesan
export declare function props<P extends object>(): Props<P>;
Salin selepas log masuk

Keperluan: Tambahkan butang pada halaman dan tangguhkan satu saat selepas mengklik butang untuk membenarkan nilai meningkat.
export const reducer = createReducer(
  initialState,
  on(increment, (state, action) => ({ count: state.count + action.count }))
)
Salin selepas log masuk

1. Tambah butang untuk peningkatan nilai tak segerak dalam templat komponen Selepas butang diklik, kaedah dilaksanakan

2 🎜> kaedah, dan pencetus Tindakan

function debug(reducer: ActionReducer<any>): ActionReducer<any> {
  return function (state, action) {
    return reducer(state, action)
  }
}

export const metaReducers: MetaReducer<AppState>[] = !environment.production
  ? [debug]
  : []
Salin selepas log masuk

yang melakukan operasi tak segerak dalam kaedah 3. Tambah Tindakan

yang melakukan operasi tak segerak dalam fail Tindakan . Terima Tindakan dan lakukan kesan sampingan, teruskan mencetuskan Tindakan

increment_async

Fungsi kesan disediakan oleh modul @ngrx/effects, jadi kebergantungan modul yang berkaitan perlu diimport dalam akar modul
<button (click)="increment_async()">async</button>
Salin selepas log masuk

increment_async

Entiti
increment_async() {
  this.store.dispatch(increment_async())
}
Salin selepas log masuk

export const increment_async = createAction("increment_async")
Salin selepas log masuk

1. Gambaran Keseluruhan

ng g effect store/effects/counter --root --module app.module.ts --skipTests

Entiti diterjemahkan sebagai entiti, dan entiti ialah sekeping data dalam koleksi .

NgRx menyediakan objek penyesuai entiti Di bawah objek penyesuai entiti, pelbagai kaedah untuk mengendalikan entiti dalam koleksi disediakan.
import { Injectable } from "@angular/core"
import { Actions, createEffect, ofType } from "@ngrx/effects"
import { increment, increment_async } from "../actions/counter.actions"
import { mergeMap, map } from "rxjs/operators"
import { timer } from "rxjs"

// createEffect
// 用于创建 Effect, Effect 用于执行副作用.
// 调用方法时传递回调函数, 回调函数中返回 Observable 对象, 对象中要发出副作用执行完成后要触发的 Action 对象
// 回调函数的返回值在 createEffect 方法内部被继续返回, 最终返回值被存储在了 Effect 类的属性中
// NgRx 在实例化 Effect 类后, 会订阅 Effect 类属性, 当副作用执行完成后它会获取到要触发的 Action 对象并触发这个 Action

// Actions
// 当组件触发 Action 时, Effect 需要通过 Actions 服务接收 Action, 所以在 Effect 类中通过 constructor 构造函数参数的方式将 Actions 服务类的实例对象注入到 Effect 类中
// Actions 服务类的实例对象为 Observable 对象, 当有 Action 被触发时, Action 对象本身会作为数据流被发出

// ofType
// 对目标 Action 对象进行过滤.
// 参数为目标 Action 的 Action Creator 函数
// 如果未过滤出目标 Action 对象, 本次不会继续发送数据流
// 如果过滤出目标 Action 对象, 会将 Action 对象作为数据流继续发出

@Injectable()
export class CounterEffects {
  constructor(private actions: Actions) {
    // this.loadCount.subscribe(console.log)
  }
  loadCount = createEffect(() => {
    return this.actions.pipe(
      ofType(increment_async),
      mergeMap(() => timer(1000).pipe(map(() => increment({ count: 10 }))))
    )
  })
}
Salin selepas log masuk

2. Teras

1.EntityState: Antara muka jenis entiti

2 Objek

3. EntityAdapter: Antara Muka Jenis Objek Penyesuai Entiti

3 Kaedah Contoh

https:/ /ngrx.io/guide/entity/adapter#adapter-collection-methods

/*
	{
		ids: [1, 2],
		entities: {
			1: { id: 1, title: "Hello Angular" },
			2: { id: 2, title: "Hello NgRx" }
		}
	}
*/
export interface State extends EntityState<Todo> {}
Salin selepas log masuk

4 Pemilih

export const adapter: EntityAdapter<Todo> = createEntityAdapter<Todo>()
// 获取初始状态 可以传递对象参数 也可以不传
// {ids: [], entities: {}}
export const initialState: State = adapter.getInitialState()
Salin selepas log masuk

<. 🎜>Stor Penghala

1 Segerakkan status penghalaan

1) Import modul

// selectTotal 获取数据条数
// selectAll 获取所有数据 以数组形式呈现
// selectEntities 获取实体集合 以字典形式呈现
// selectIds 获取id集合, 以数组形式呈现
const { selectIds, selectEntities, selectAll, selectTotal } = adapter.getSelectors();
Salin selepas log masuk
2. ) Integrasikan status penghalaan ke dalam Stor
export const selectTodo = createFeatureSelector<AppState, State>(todoFeatureKey)
export const selectTodos = createSelector(selectTodo, selectAll)
Salin selepas log masuk

2. Cipta Pemilih untuk mendapatkan status penghalaan

Kemas kini Untuk lebih pengetahuan berkaitan pengaturcaraan, sila layari:

Video Pengaturcaraan

! !
import { StoreRouterConnectingModule } from "@ngrx/router-store"

@NgModule({
  imports: [
    StoreRouterConnectingModule.forRoot()
  ]
})
export class AppModule {}
Salin selepas log masuk

Atas ialah kandungan terperinci Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memasang Angular pada Ubuntu 24.04 Bagaimana untuk memasang Angular pada Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ialah platform JavaScript yang boleh diakses secara bebas untuk mencipta aplikasi dinamik. Ia membolehkan anda menyatakan pelbagai aspek aplikasi anda dengan cepat dan jelas dengan memanjangkan sintaks HTML sebagai bahasa templat. Angular.js menyediakan pelbagai alatan untuk membantu anda menulis, mengemas kini dan menguji kod anda. Selain itu, ia menyediakan banyak ciri seperti penghalaan dan pengurusan borang. Panduan ini akan membincangkan cara memasang Angular pada Ubuntu24. Mula-mula, anda perlu memasang Node.js. Node.js ialah persekitaran berjalan JavaScript berdasarkan enjin ChromeV8 yang membolehkan anda menjalankan kod JavaScript pada bahagian pelayan. Untuk berada di Ub

Pembelajaran sudut bercakap tentang komponen kendiri (Komponen Kendiri) Pembelajaran sudut bercakap tentang komponen kendiri (Komponen Kendiri) Dec 19, 2022 pm 07:24 PM

Artikel ini akan membawa anda untuk terus belajar sudut dan memahami secara ringkas komponen kendiri (Komponen Kendiri) dalam Angular Saya harap ia akan membantu anda!

Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx May 25, 2022 am 11:01 AM

Artikel ini akan memberi anda pemahaman yang mendalam tentang pengurus negeri Angular NgRx dan memperkenalkan cara menggunakan NgRx saya harap ia akan membantu anda!

Analisis ringkas tentang cara menggunakan editor monaco dalam sudut Analisis ringkas tentang cara menggunakan editor monaco dalam sudut Oct 17, 2022 pm 08:04 PM

Bagaimana untuk menggunakan monaco-editor dalam sudut? Artikel berikut merekodkan penggunaan monaco-editor dalam sudut yang digunakan dalam perniagaan baru-baru ini. Saya harap ia akan membantu semua orang!

Artikel yang meneroka pemaparan sisi pelayan (SSR) dalam Angular Artikel yang meneroka pemaparan sisi pelayan (SSR) dalam Angular Dec 27, 2022 pm 07:24 PM

Adakah anda tahu Angular Universal? Ia boleh membantu tapak web menyediakan sokongan SEO yang lebih baik!

Angular NG-ZORRO dengan cepat membangunkan sistem bahagian belakang Angular NG-ZORRO dengan cepat membangunkan sistem bahagian belakang Apr 21, 2022 am 10:45 AM

Artikel ini akan berkongsi dengan anda pengalaman praktikal Angular dan mempelajari cara membangunkan sistem bahagian belakang dengan cepat menggunakan angualr digabungkan dengan ng-zorro. Saya harap ia akan membantu semua orang.

Cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan Cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan May 11, 2023 pm 04:04 PM

Dengan perkembangan pesat Internet, teknologi pembangunan bahagian hadapan juga sentiasa bertambah baik dan berulang. PHP dan Angular ialah dua teknologi yang digunakan secara meluas dalam pembangunan bahagian hadapan. PHP ialah bahasa skrip sebelah pelayan yang boleh mengendalikan tugas seperti memproses borang, menjana halaman dinamik dan mengurus kebenaran akses. Angular ialah rangka kerja JavaScript yang boleh digunakan untuk membangunkan aplikasi satu halaman dan membina aplikasi web berkomponen. Artikel ini akan memperkenalkan cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan, dan cara menggabungkannya

Apakah yang perlu saya lakukan jika projek itu terlalu besar? Bagaimana untuk membahagikan projek Angular dengan munasabah? Apakah yang perlu saya lakukan jika projek itu terlalu besar? Bagaimana untuk membahagikan projek Angular dengan munasabah? Jul 26, 2022 pm 07:18 PM

Projek Angular terlalu besar, bagaimana untuk membahagikannya secara munasabah? Artikel berikut akan memperkenalkan kepada anda cara membahagikan projek Angular secara munasabah. Saya harap ia akan membantu anda!

See all articles