跳到主要内容

Code Editor — Angular

@aiao/code-editor-angular 提供 Angular 组件,支持 ControlValueAccessor(ngModel / Reactive Forms)、Signal Input 和丰富的公共方法。

安装

npm install @aiao/code-editor-angular

Peer dependencies: @codemirror/commands, @codemirror/language, @codemirror/state, @codemirror/theme-one-dark, @codemirror/view, codemirror

基础用法

import { CodeEditor } from '@aiao/code-editor-angular';

@Component({
standalone: true,
imports: [CodeEditor],
template: ` <ao-code-editor [value]="code" (aoChange)="onCodeChange($event)" language="typescript" theme="dark" /> `
})
export class MyComponent {
code = 'const x = 1;';
onCodeChange(value: string) {
this.code = value;
}
}

表单集成

Template-driven Forms

<ao-code-editor [(ngModel)]="code" language="sql" />

Reactive Forms

form = new FormGroup({
query: new FormControl('SELECT * FROM users')
});
<ao-code-editor formControlName="query" language="sql" />
ControlValueAccessor

writeValue() 设置值时标记为 External Annotation,不会触发 aoChange 事件,避免循环更新。

组件 API

Selector: ao-code-editor ChangeDetection: OnPush Standalone: Yes

Input Properties

Input类型默认值说明
autoFocusbooleanfalse初始化后自动聚焦
disabledbooleanfalse禁用编辑
highlightWhitespacebooleanfalse高亮空白字符
indentUnitstring''缩进单位
indentWithTabbooleanfalseTab 缩进
languagestring''语言名称
languagesLanguageDescription[]SUPPORT_LANGUAGES可用语言列表
lineWrappingbooleanfalse自动换行
placeholderstring''占位文本
readonlybooleanfalse只读模式
rootDocument | ShadowRootShadow DOM 根节点
setup'basic' | 'minimal' | null'basic'预设扩展包
themeCodeEditorTheme'light'主题
valuestring''编辑器内容

Output Events

Output类型说明
aoChangeEventEmitter<string>内容变化(不含 writeValue
aoFocusEventEmitter<void>获得焦点
aoBlurEventEmitter<void>失去焦点

公共方法

方法签名说明
setValue(value: string, external?: boolean) => void设置内容
setEditable(value: boolean) => void设置可编辑
setReadonly(value: boolean) => void设置只读
setTheme(value: CodeEditorTheme) => void切换主题
setPlaceholder(value: string) => void设置占位文本
setIndentWithTab(value: boolean) => void切换 Tab 缩进
setIndentUnit(value: string) => void设置缩进单位
setLineWrapping(value: boolean) => void设置换行
setHighlightWhitespace(value: boolean) => void空白字符高亮
setLanguage(lang: string) => void切换语言
setExtensions(value: Extension[]) => void替换所有扩展

Angular 特有功能

  • Signal Input:所有 input 使用 input() Signal 定义
  • SSR 安全isPlatformBrowser 守卫,服务端不初始化编辑器
  • 自定义语言列表:通过 languages input 限制可用语言
  • Shadow DOM 支持:通过 root input 指定挂载根节点
  • setup=null:完全无预设扩展,通过 setExtensions() 自定义