- Angular 教程
- Angular - 首页
- Angular - 概述
- Angular - 特性
- Angular - 优点与缺点
- Angular 基础
- Angular - 环境设置
- Angular - 第一个应用
- Angular - MVC 架构
- Angular 组件
- Angular - 组件
- Angular - 组件生命周期
- Angular - 视图封装
- Angular - 组件交互
- Angular - 组件样式
- Angular - 嵌套组件
- Angular - 内容投影
- Angular - 动态组件
- Angular - 元素
- Angular 模板
- Angular - 模板
- Angular - 文本插值
- Angular - 模板语句
- Angular - 模板中的变量
- Angular - SVG 作为模板
- Angular 绑定
- Angular - 绑定及其类型
- Angular - 数据绑定
- Angular - 事件绑定
- Angular - 属性绑定
- Angular - 属性绑定
- Angular - 类和样式绑定
- Angular 指令
- Angular - 指令
- Angular - 内置指令
- Angular 管道
- Angular - 管道
- Angular - 使用管道转换数据
- Angular 依赖注入
- Angular - 依赖注入
- Angular HTTP 客户端编程
- Angular - 服务
- Angular - HTTP 客户端
- Angular - 请求
- Angular - 响应
- Angular - 获取
- Angular - PUT
- Angular - DELETE
- Angular - JSON-P
- Angular - 使用 HTTP 进行 CRUD 操作
- Angular 路由
- Angular - 路由
- Angular - 导航
- Angular - Angular Material
- Angular 动画
- Angular - 动画
- Angular 表单
- Angular - 表单
- Angular - 表单验证
- Angular Service Workers 和 PWA
- Angular - Service Workers 和 PWA
- Angular 测试
- Angular - 测试概述
- Angular NgModules
- Angular - 模块介绍
- Angular 高级
- Angular - 身份验证和授权
- Angular - 国际化
- Angular - 可访问性
- Angular - Web Workers
- Angular - 服务器端渲染
- Angular - Ivy 编译器
- Angular - 使用 Bazel 构建
- Angular - 向后兼容性
- Angular - 响应式编程
- Angular - 指令和组件之间共享数据
- Angular 工具
- Angular - CLI
- Angular 杂项
- Angular - 第三方控件
- Angular - 配置
- Angular - 显示数据
- Angular - 装饰器和元数据
- Angular - 基本示例
- Angular - 错误处理
- Angular - 测试和构建项目
- Angular - 生命周期钩子
- Angular - 用户输入
- Angular - 有什么新变化?
- Angular 有用资源
- Angular - 快速指南
- Angular - 有用资源
- Angular - 讨论
Angular - SVG 作为模板
SVG 提供了一个使用声明式编程创建丰富图形的框架。Angular 模板可以应用于 SVG,以最小的努力创建动态图形。
在本节中,让我们学习如何使用 Angular 模板在 SVG 中创建动态图表。
动态条形图
让我们在 SVG 格式中创建一个简单的条形图,并在我们的模板中使用它,然后通过模板输入变量动态更新条形图。
步骤 1: 使用 Angular CLI 创建一个新应用程序,如下所示 -
$ ng new my-app
步骤 2: 使用 Angular CLI 创建一个名为 chart 的组件,如下所示 -
$ ng generate component chart CREATE src/app/chart/chart.component.css (0 bytes) CREATE src/app/chart/chart.component.html (20 bytes) CREATE src/app/chart/chart.component.spec.ts (552 bytes) CREATE src/app/chart/chart.component.ts (198 bytes) UPDATE src/app/app.module.ts (835 bytes)
步骤 3: 接下来,打开组件模板文件 chart.component.html 并添加一个静态条形图到 SVG 中。
<svg class="chart" width="420" height="150"> <title id="title">Bar chart</title> <desc id="desc">Fruits count</desc> <g class="bar"> <rect width="50" height="19"></rect> <text x="55" y="9.5" dy=".35em">5 Apples</text> </g> <g class="bar"> <rect width="100" height="19" y="20"></rect> <text x="105" y="28" dy=".35em">10 Orange</text> </g> <g class="bar"> <rect width="40" height="19" y="40"></rect> <text x="45" y="48" dy=".35em">2 Lemons</text> </g> </svg>
步骤 4: 接下来,打开组件的样式文件 chart.component.css 并添加以下 CSS 来设置 SVG 条形图的样式。
.bar { fill: red; height: 21px; transition: fill .3s ease; cursor: pointer; font-family: Helvetica, sans-serif; } .bar text { color: black; } .bar:hover, .bar:focus { fill: black; } .bar:hover text, .bar:focus text { fill: red;
步骤 5: 接下来,打开应用程序组件模板 app.component.html 并添加我们的 chart 组件
<app-chart />
步骤 6: 运行应用程序并检查图表是否已正确渲染
步骤 7: 接下来,创建一个名为 Fruit 的接口来保存图表数据
$ ng generate interface Fruit CREATE src/app/fruit.ts (27 bytes)
步骤 8: 使用名称和数量值更新接口
export interface Fruit { name: string; count: number; }
步骤 9: 在 chart 组件中导入 Fruit 接口
import { Fruit } from '../fruit'
步骤 10: 在 chart 组件中添加示例水果数据
fruits : Fruit[] = [ { name: 'Apple', count: 10 }, { name: 'Orange', count: 20 }, { name: 'Lemon', count: 5 } ]
步骤 11: 组件的完整列表如下 -
import { Component } from '@angular/core'; import { Fruit } from '../fruit' @Component({ selector: 'app-chart', templateUrl: './chart.component.html', styleUrls: ['./chart.component.css'] }) export class ChartComponent { fruits : Fruit[] = [ { name: 'Apple', count: 10 }, { name: 'Orange', count: 20 }, { name: 'Lemon', count: 5 } ] }
步骤 12: 接下来,打开组件的模板文件并更新条形图以使用来自组件的 fruit 模板变量,如下所示 -
<svg class="chart" width="420" height="150"> <g class="bar" *ngFor="let fruit of fruits; let i = index;"> <rect [attr.width]="fruit.count * 10" height="19" [attr.y]="0 + (i * 20)"></rect> <text [attr.x]="fruit.count * 10 + 5" [attr.y]="10 + (i * 20)" dy=".35em"> {{ fruit.count }} {{ fruit.name }} </text> </g> </svg>
这里,
ngFor(结构指令)用于循环遍历 fruits
属性绑定([attr.width]、[attr.x] 和 [attr-y])与模板语句一起使用,根据 fruits 模板变量动态添加图表中的每个条形。
fruit.count * 10 是一个模板语句,它根据水果数量设置条形的宽度。
0 + (i * 20) 是另一个模板语句,它设置图表中条形的位置。
fruit.count * 10 + 5 是另一个模板语句,它设置图表中条形末端文本的 x 坐标。
10 + (i * 20) 是另一个模板语句,它设置图表中条形末端文本的 y 坐标。
步骤 13: 运行应用程序并检查图表是否已正确渲染
总结
SVG 图形可以通过 Angular 模板轻松完成。我们可以将其与表单编程结合起来,动态设置条形图的样式,并扩展条形图以支持其他类型的图表。SVG 图表只是一个示例,说明如何在 Angular 模板中创建/操作 SVG。它可以用来创建高级 SVG 图形,如地图、基于 SVG 的动画等。