@ajsf/bootstrap4

中文文档
22.6.0发布于 2026/10/26MITTypeScriptES Module构建来源已验证近 30 天下载 2615

Angular JSON Schema Form builder using Bootstrap 4 UI

原始使用文档
文档目录5 节
  1. Getting started
  2. Bootstrap 4 markup, corrected in 20.1.0
  3. Checkbox and radio structure, changed in 22.1.0
  4. Array row layout, changed in 22.2.0
  5. Array titles, changed in 22.2.0

@ajsf/bootstrap4

Repository coverage, SonarQube Cloud

Bootstrap 4 framework for AJSF, which builds Angular forms from JSON Schema.

Getting started

Install the package and Bootstrap 4:

npm install @ajsf/bootstrap4 bootstrap@4

Add Bootstrap's stylesheet to the styles of the build target in angular.json:

"styles": [
  "node_modules/bootstrap/dist/css/bootstrap.min.css",
  "src/styles.css"
]

Import Bootstrap4FrameworkModule in the standalone component that renders the form. Nothing goes in app.config.ts:

import { Component } from '@angular/core';
import { Bootstrap4FrameworkModule } from '@ajsf/bootstrap4';

@Component({
  selector: 'app-root',
  imports: [Bootstrap4FrameworkModule],
  templateUrl: './app.html',
})
export class App {
  schema = {
    type: 'object',
    properties: {
      name: { type: 'string', title: 'Name' },
      plan: { type: 'string', title: 'Plan', enum: ['free', 'pro', 'team'] },
    },
    required: ['name'],
  };

  onSubmit(data: any) {
    console.log(data);
  }
}

In an NgModule app, add Bootstrap4FrameworkModule to the module's imports instead.

Then render the form in the component's template:

<json-schema-form
  [schema]="schema"
  framework="bootstrap-4"
  (onSubmit)="onSubmit($event)">
</json-schema-form>

framework="bootstrap-4" selects this package's templates. The other values are material-design, primeng, bootstrap-3, bootstrap-5 and no-framework, the default.

To try the library without installing Bootstrap, bind [loadExternalAssets]="true" on <json-schema-form> instead, which loads Bootstrap 4 from a CDN. Load the assets yourself in production.

The AJSF README covers the other inputs and outputs, layouts, custom widgets and validation messages.

Bootstrap 4 markup, corrected in 20.1.0

This package previously emitted Bootstrap 3 class names. It was created as a copy of @ajsf/bootstrap3 with the CDN URL changed, so classes Bootstrap 4 had dropped kept being rendered and silently did nothing. If you have written CSS against the old output, these are the names that changed.

WasIs nowWhy
has-error, has-success, has-feedbackis-invalid on the field wrapperBootstrap 4 marks the field, not the container
help-blockform-text text-mutedBootstrap 4's help text class
form-control-feedback, glyphiconremovedBootstrap 4 ships no glyphicons
input-group-addoninput-group-prepend or input-group-append wrapping input-group-textBootstrap 4's addon structure
pull-rightfloat-rightrenamed in Bootstrap 4
control-labelno classBootstrap 4 styles a plain label in a stacked form
btn-defaultbtn-secondaryBootstrap 4's neutral button

form-group and sr-only are unchanged, because Bootstrap 4 still defines both.

Validation messages also behave differently, and this part applies to @ajsf/bootstrap3 and @ajsf/bootstrap5 too. A message used to appear only once the value had changed, so focusing a required field and leaving it empty showed nothing. It now appears once the field has been touched or changed. Error text and help text are also separate elements now, so you can style one without the other.

Checkbox and radio structure, changed in 22.1.0

Checkboxes and radios previously rendered the <input> inside its <label>, which is the Bootstrap 3 shape this package was copied from. They now render as siblings inside a .form-check wrapper, which is what Bootstrap 4 documents and what its state styling requires:

<div class="form-check">
  <input class="form-check-input" id="control1" type="checkbox">
  <label class="form-check-label" for="control1">Accept</label>
</div>

The inline variants (checkboxes-inline, radios-inline) moved the same way, from the deleted Bootstrap 3 checkbox-inline and radio-inline classes to form-check form-check-inline on the same sibling shape.

Toggle buttons (checkboxbuttons, radiobuttons) are unchanged. Bootstrap 4 documents those as .btn-group-toggle with the input inside the label, and has no .btn-check.

If you wrote CSS selecting label > input or styling the label as the control's ancestor, that is where the difference is.

Array row layout, changed in 22.2.0

The remove button on an array item used to be the first child of the field wrapper and floated, so it left normal flow and sat at the top of the row rather than beside the control. It now shares a flex row with the field. Beside a single control it aligns to that control's centre; when the item is a group of fields it anchors at the group's top edge, because a group's midpoint moves as its contents grow.

Two details matter if you have written CSS against the old output. Every field gains one wrapper element between the outer form-group container and the field itself, and that wrapper becomes a flex container only on a removable array item. The invalid marker moved onto that wrapper, so a selector written as .input-group.is-invalid no longer matches; the marker is now on the element directly above it.

Array titles, changed in 22.2.0

An array rendered its title twice: once as the field label, and again as the fieldset legend, which the widget rebuilt from the raw property name. A phone_numbers property showed "Phone Numbers" followed by "Phone_numbers".

The title now belongs to the widget, as it already did for a fieldset, so it renders once, on the <legend> that names the group, in the normalised spelling. If your CSS targets the array label through labelHtmlClass, it now applies to the legend.

The required marker moves with the title. It was previously appended only to the framework's own label, so a required fieldset, whose title the widget already owned, rendered no asterisk at all; it now does.

版本与发布记录

@ajsf/bootstrap4 共发布 55 个版本,首次发布于 2020/01/12;过去 12 个月发布了 35 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
22.6.0latest2026/10/2613 天前
22.5.02026/10/2513 天前
22.4.02026/10/2514 天前
22.3.32026/10/2414 天前
22.3.22026/10/2414 天前
22.3.12026/09/251 个月前

其他发布通道:next → 20.0.0-rc.0。

关于 @ajsf/bootstrap4 的常见问题

@ajsf/bootstrap4 是什么?

Angular JSON Schema Form builder using Bootstrap 4 UI

如何安装 @ajsf/bootstrap4?

在项目目录运行 npm install @ajsf/bootstrap4,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@angular/core(^22.0.0)、@angular/common(^22.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@ajsf/bootstrap4 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ajsf/bootstrap4 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ajsf/bootstrap4 可以商用吗?

@ajsf/bootstrap4 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ajsf/bootstrap4 的下载量有多少?

根据 npm 官方下载统计,@ajsf/bootstrap4 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,615 次,日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ajsf/bootstrap4 还在维护吗?

最新版本 22.6.0 发布于 2026/10/26(13 天前);至今共发布 55 个版本,其中过去 12 个月发布了 35 个;首次发布于 2020/01/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。