mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tree:
c35461d4e6
RandomHelper
abp-release-post
abp-studio/issue/2891
add-loading-component
advanced-features
article/angular-multithreading
article/resource-based-api
auto-merge/prerel-8-2/2729
auto-merge/rel-10-2/4454
auto-merge/rel-10-2/4463
auto-merge/rel-10-5/4643
auto-merge/rel-10-5/4645
auto-merge/rel-10-5/4680
auto-merge/rel-10-5/4694
auto-merge/rel-7-4/2239
auto-merge/rel-8-0/2472
auto-merge/rel-8-0/2715
auto-merge/rel-8-0/2741
auto-merge/rel-8-1/2527
auto-merge/rel-9-1/3656
blazor-full-stack-web-ui-interactiveauto
codex/update-abp-ai-agent-deep-dive-title
copilot/allow-adding-public-website
copilot/sub-pr-24469
copilot/sub-pr-24636
copilot/sub-pr-24842
copilot/sub-pr-24889
copilot/sub-pr-24949
copilot/update-documentation-react-native
dev
dgnyldrm7-patch-1
docs-test-1
docs-unification
docs/studio-2.2.1
docs/studio-2.2.2
docs/studio-2.2.3
docs/studio-2.2.4
document-abp-run-watch-command
documentation/#20827-modular-monolith-application
documentation/20827
documentation/abp-extensible-form-doc
enisn-patch-1
enisn/blobstoring-bunnycdn
feat/#23955
feat/ai-assistant-article-enhancements
feat/dynamic-form-component
feature/#19594
feature/#23180
feature/ai-chat-history-docs
feature/ssr-migration-schematic
fix-admin-docs-test
fix/#20241
fix/#23795
gizem/HTML-encode-TagHelper-xss-test
gizem/cpm-nightly-support
gizem/security-logs
gizem/switch-to-nightly
hybrid-ui
issue-#23231
issue-#3417
issue-#3591
issue-#3596
issue-#6679
issue-#6768
issue-18421
issue-19307
issue-20436
issue-20924-2
issue-21015
issue-22408
issue-23113
issue-23231
issue-23286
issue-24272
issue-24438-test
issue-24635-test
issue-24672
issue-24674
issue-24918-2
issue-2884
issue-3596
issue-3870/L
issue-5131
issue-remove-abp-io-localization
issue-volo-21285
issue-vs-7809
issue/22675
issue/25581
issue/abp-ng-upgrade
issue/assign-available-port-for-suite
issue/updateAngularInstallers
issut/7552
jenkins-abp-release-308
maliming/drop-jquery-migrate
maliming/dynamic-job-tenant
maliming/permission-batch-update
mansur-vs-internal-#7864
mauiglobalbundle
migrating-abp-packages/core
migrating-abp-packages/identity
migrating-abp-packages/setting-management
migrating-abp-packages/tenant-management
migrating-abp-packages/theme-shared
net11.0
pr/2526
pr/6814
prerel-9.0
rel-1.0
rel-1.1
rel-10.0
rel-10.1
rel-10.2
rel-10.3
rel-10.4
rel-10.5
rel-10.6
rel-10.7
rel-2.0
rel-2.1
rel-2.2
rel-2.3
rel-2.4
rel-2.5
rel-2.6
rel-2.7
rel-2.8
rel-2.9
rel-3.0
rel-3.1
rel-3.2
rel-3.3
rel-4.0
rel-4.1
rel-4.2
rel-4.3
rel-4.4
rel-5.0
rel-5.1
rel-5.2
rel-5.3
rel-6.0
rel-7.0
rel-7.1
rel-7.2
rel-7.3
rel-7.4
rel-8.0
rel-8.1
rel-8.2
rel-8.3
rel-9.0
rel-9.1
rel-9.2
rel-9.3
remove-deprecateds
return-code-vs-exception-article
revert-18876-blazor-full-stack-web-ui
revert-20264-EngincanV/cli-old-vs-new
salihozkara-patch-1
salihozkara-patch-2
salihozkara/blazorise-validation-message
salihozkara/complex-property
salihozkara/fix-image
salihozkara/fixDatePicker
salihozkara/low-code-107-feature-docs
salihozkara/lowcode-page-interceptor-schemas
salihozkara/mapperly-test
studio-custom-command-doc
studio-document-start-and-wait
studio-linux-community-article
taskever--3b6w1uy1
template-config-provider
test-branch-24299
test/issue-25858
update-cli-docs
update-doc
update-latest-versions-7.4.3
update-latest-versions-8.1.2
update-latest-versions-8.1.5
update-latest-versions-8.2.3
update-latest-versions-9.0.7
update-latest-versions-9.1.0
update-upgrade-cod-23-08-2024
upgrade-command-doc
volobox--bhsygwll
volobox--dcqsmt9p
vsInternal-viewcChangeHistory-localization
vsinternal-7565
0.10.0
0.11.0
0.12.0
0.13.0
0.14.0
0.15.0
0.16.0
0.17.0.0
0.18.0
0.18.1
0.19.0
0.20.0
0.20.1
0.21.0
0.22.0
0.3.7
0.4.0
0.4.1
0.4.1.1
0.5.0
0.6.0
0.6.1
0.7.0
0.7.1
0.8.0
0.9.0
1.0.0
1.0.2
1.1.0
1.1.1
1.1.2
10.0.0
10.0.0-rc.1
10.0.0-rc.2
10.0.0-rc.3
10.0.1
10.0.2
10.0.3
10.1.0
10.1.0-rc.1
10.1.0-rc.2
10.1.0-rc.3
10.1.1
10.2.0
10.2.0-rc.1
10.2.0-rc.2
10.2.0-rc.3
10.2.0-rc.4
10.2.1
10.3.0
10.3.0-rc.1
10.3.0-rc.2
10.4.0
10.4.0-rc.1
10.4.0-rc.2
10.4.1
10.5.0
10.5.0-rc.1
10.5.0-rc.2
10.5.0-rc.3
10.5.0-rc.4
10.6.0
10.6.0-rc.1
10.6.0-rc.2
10.6.0-rc.3
10.7.0-rc.1
10.7.0-rc.2
10.7.0-rc.3
10.7.0-rc.4
2.0.0
2.0.1
2.1.0
2.1.1
2.2.0
2.2.1
2.3
2.3.0
2.4.0
2.4.1
2.5.0
2.6.0
2.6.1
2.6.2
2.7.0
2.8.0
2.9.0
3.0.0
3.0.1
3.0.2
3.0.3
3.0.4
3.0.5
3.1.0
3.1.0-rc.1
3.1.0-rc.2
3.1.0-rc.3
3.1.0-rc.4
3.1.1
3.1.2
3.2.0
3.2.0-rc.1
3.2.0-rc.2
3.2.1
3.3.0
3.3.0-rc.1
3.3.0-rc.2
3.3.1
3.3.2
4.0.0
4.0.0-rc.1
4.0.0-rc.2
4.0.0-rc.3
4.0.0-rc.4
4.0.0-rc.5
4.0.1
4.0.2
4.1.0
4.1.0-rc.1
4.1.0-rc.2
4.1.1
4.1.2
4.2.0
4.2.0-rc.1
4.2.0-rc.2
4.2.1
4.2.2
4.3.0
4.3.0-rc.1
4.3.0-rc.2
4.3.1
4.3.2
4.3.3
4.4.0
4.4.0-rc.1
4.4.0-rc.2
4.4.1
4.4.2
4.4.3
4.4.4
5.0.0
5.0.0-beta.1
5.0.0-beta.2
5.0.0-beta.3
5.0.0-rc.1
5.0.0-rc.2
5.0.1
5.0.2
5.1.0
5.1.1
5.1.2
5.1.3
5.1.4
5.2.0
5.2.0-rc.1
5.2.0-rc.2
5.2.1
5.2.2
5.3.0
5.3.0-rc.1
5.3.0-rc.2
5.3.0-rc.3
5.3.1
5.3.2
5.3.3
5.3.4
5.3.5
6.0.0
6.0.0-rc.1
6.0.0-rc.2
6.0.0-rc.3
6.0.0-rc.4
6.0.0-rc.5
6.0.1
6.0.2
6.0.3
7.0.0
7.0.0-rc.1
7.0.0-rc.2
7.0.0-rc.3
7.0.0-rc.4
7.0.0-rc.5
7.0.0-rc.6
7.0.1
7.0.2
7.0.3
7.1.0
7.1.0-rc.1
7.1.0-rc.2
7.1.0-rc.3
7.1.1
7.2.0-rc.1
7.2.0-rc.2
7.2.1
7.2.2
7.2.3
7.3.0
7.3.0-rc.1
7.3.0-rc.2
7.3.0-rc.3
7.3.1
7.3.2
7.3.3
7.4.0
7.4.0-rc.1
7.4.0-rc.2
7.4.0-rc.3
7.4.0-rc.4
7.4.0-rc.5
7.4.1
7.4.2
7.4.3
7.4.4
7.4.5
8.0.0
8.0.0-rc.1
8.0.0-rc.2
8.0.0-rc.3
8.0.1
8.0.2
8.0.3
8.0.4
8.0.5
8.0.6
8.1.0
8.1.0-rc.1
8.1.0-rc.2
8.1.0-rc.3
8.1.0-rc.4
8.1.1
8.1.2
8.1.3
8.1.4
8.1.5
8.2.0
8.2.0-rc.1
8.2.0-rc.2
8.2.0-rc.3
8.2.0-rc.4
8.2.0-rc.5
8.2.1
8.2.2
8.2.3
8.3.0
8.3.0-rc.1
8.3.0-rc.2
8.3.0-rc.3
8.3.1
8.3.2
8.3.3
8.3.4
9.0.0
9.0.0-rc.1
9.0.0-rc.2
9.0.0-rc.3
9.0.1
9.0.2
9.0.3
9.0.4
9.0.5
9.0.6
9.0.7
9.0.8
9.1.0
9.1.0-rc.1
9.1.0-rc.2
9.1.0-rc.3
9.1.1
9.1.2
9.1.3
9.2.0
9.2.0-rc.1
9.2.0-rc.2
9.2.0-rc.3
9.2.0-rc.4
9.2.1
9.2.2
9.2.3
9.2.4
9.3.0
9.3.0-rc.1
9.3.0-rc.2
9.3.0-rc.3
9.3.0-rc.4
9.3.1
9.3.2
9.3.3
9.3.4
9.3.5
9.3.6
9.3.7
archive/Blazorise-Form-Submit
archive/EngincanV/react-docs-updates
archive/abp-plugin
archive/abp-united-pre-merge
archive/auto-merge/prerel-9-0/3134
archive/auto-merge/prerel-9-0/3181
archive/auto-merge/rel-10-0/4007
archive/auto-merge/rel-10-0/4064
archive/auto-merge/rel-10-0/4133
archive/auto-merge/rel-10-1/4237
archive/auto-merge/rel-10-4/4526
archive/auto-merge/rel-7-4/2276
archive/auto-merge/rel-8-2/2851
archive/auto-merge/rel-8-3/3151
archive/auto-merge/rel-9-0/3296
archive/auto-merge/rel-9-0/3304
archive/auto-merge/rel-9-2/3571
archive/auto-merge/rel-9-2/3652
archive/before-net10
archive/data-collection-code-review-2
archive/data-collection-review-3
archive/data-collection-review-5
archive/devnot-demo
archive/ebicoglu-patch-3
archive/feat/typescript-on-mvc
archive/feature/logo-provider
archive/halil-presentation-2024-05
archive/ingress-nginx/ingress-nginx
archive/issue-23231-v2
archive/issue-5384
archive/patch-1-engincanv
v0.3.1
v0.3.2
v0.3.2.1
v0.3.2.2
v0.3.3
v0.3.3.1
v0.3.3.2
v0.3.4
v0.3.5
v0.3.6
v0.6.2
v1.1.1
v9.2.0-preview
${ noResults }
2.8 KiB
2.8 KiB
轻松实现TrackByFunction
TrackByService 是一个实用服务,为Angular模板中最常见的需求之一: TrackByFunction 提供简单的实现. 在继续下面的内容之前,请参先阅 Angular 文档.
入门
你不必在模块或组件级别提供 TrackByService,因为它已经在根中提供了. 你可以在组件中注入并开始使用它. 为了获得更好的类型支持,你可以将迭代项目的类型传递给它.
import { TrackByService } from '@abp/ng.core';
@Component({
/* class metadata here */
})
class DemoComponent {
list: Item[];
constructor(public readonly track: TrackByService<Item>) {}
}
注意到
track是public并且readonly了吗? 因为我们将看到一些在组件模板中直接使用TrackByService实例的方法示例. 可以把它看做反模式,但它有自身的优势,尤其是在利用组件继承时. 你始终可以使用公共组件属性.
成员也被导出做为独立的函数. 如果你不想注入 TrackByService, 你可以直接在类中导入并使用这些函数.
用法
有两种方法可用.
- 你可以直接注入
TrackByService到你的组件并且使用它的成员. - 你可以在直接在组件属性上使用导出的函数.
如何通过一个键跟踪项
你可以使用 by 获取一个 TrackByFunction , 该函数根据它的一个键来跟踪迭代的对象. 你可以将迭代类型传递给它获得类型支持.
<!-- template of DemoComponent -->
<div *ngFor="let item of list; trackBy: track.by('id')">{%{{{ item.name }}}%}</div>
by 作为一个独立函数导出,命名为 trackBy.
import { trackBy } from "@abp/ng.core";
@Component({
template: `
<div
*ngFor="let item of list; trackBy: trackById"
>
{%{{{ item.name }}}%}
</div>
`,
})
class DemoComponent {
list: Item[];
trackById = trackBy<Item>('id');
}
如何通过深度嵌套的键进行跟踪
你可以使用 byDeep 获取一个 TrackByFunction , 它根据深度嵌套的键跟踪迭代对象. 你可以将迭代类型传递给它获得类型支持.
<!-- template of DemoComponent -->
<div
*ngFor="let item of list; trackBy: track.byDeep('tenant', 'account', 'id')"
>
{%{{{ item.tenant.name }}}%}
</div>
byDeep 作为一个独立函数导出,命名为 trackByDeep.
import { trackByDeep } from "@abp/ng.core";
@Component({
template: `
<div
*ngFor="let item of list; trackBy: trackByTenantAccountId"
>
{%{{{ item.name }}}%}
</div>
`,
})
class DemoComponent {
list: Item[];
trackByTenantAccountId = trackByDeep<Item>('tenant', 'account', 'id');
}