最近有个小错误,因为最近还是在看thingsboard,最近终于看到前端的代码,突然发现怎么全是ts的文件,仔细一看原来并不是之前认为的AngularJS,而是Angular。。。我tm真的无语了,又要去重新学。。。

Angular的结构比起AngularJS真的复杂很多,以前还可以说是传统HTML+JS结构的扩展。新的版本真的大变了。

以前的AngularJS只要一个html就是开炫,现在是要一堆文件,就算摸清楚最小系统,也要折腾一番,唉,好吧。。。

1 环境配置

手动配置Angular的环境也是堪称折磨,尤其是package.json,tsconfig.json。所以一般都用自动配置。

首先是安装node.js,安装的原始命令是:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
因为众所周知的原因,这个命令很大概率要超时,必须换成。

curl -o- https://gitee.com/mirrors/nvm/raw/v0.39.7/install.sh | bash

之后source ~/.bashrc

然后升级nvm install --lts
# 然后全局安装 Angular CLI
npm i -g @angular/cli

后面用到的ng命令,就是Angular CLI工具。这个工具的帮助如下: 

# 创建项目(这一步 CLI 会自动生成配置和依赖),
ng new hello-angular --minimal --routing=false --style=css
cd hello-angular
ng serve -o      # 默认 http://localhost:4200

2 典型的Angular

在上一步生成的代码基础上,做了一些修改。如下: 

 main.ts

import { bootstrapApplication } from '@angular/platform-browser';
import { App } from './app/app';
import { appConfig } from './app/app.config';bootstrapApplication(App, appConfig).catch((err) => console.error(err));

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>HelloAngular</title><base href="/" /></head><body><app-root></app-root>  <!-- 👈 Angular 根组件挂载点 --></body>
</html>

 app.ts

import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common'; // ✅ 加上这个!
import { TodoService, TodoItem } from './todo.service';@Component({selector: 'app-root',standalone: true,imports: [FormsModule, CommonModule],  // ✅ 把 CommonModule 加入 importstemplateUrl: './app.component.html',styleUrls: ['./app.component.css'],
})
export class App {newTitle = '';constructor(public todo: TodoService) {}add() {if (this.newTitle.trim()) {this.todo.add({ title: this.newTitle.trim(), done: false });this.newTitle = '';}}toggle(item: TodoItem) {this.todo.toggle(item);}remove(item: TodoItem) {this.todo.remove(item);}
}

todo.service.ts

import { Injectable } from '@angular/core';export interface TodoItem {title: string;done: boolean;
}@Injectable({ providedIn: 'root' })
export class TodoService {list: TodoItem[] = [];add(item: TodoItem) { this.list.push(item); }toggle(item: TodoItem) { item.done = !item.done; }remove(item: TodoItem) { this.list = this.list.filter(i => i !== item); }
}

app.config.ts

import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core';export const appConfig: ApplicationConfig = {providers: [provideBrowserGlobalErrorListeners(),provideZoneChangeDetection({ eventCoalescing: true }),]
};

app.component.html

<h1>📝 Angular Todo (standalone)</h1><inputplaceholder="输入待办事项"[(ngModel)]="newTitle"(keyup.enter)="add()"
/>
<button (click)="add()">添加</button><ul><li *ngFor="let item of todo.list"><input type="checkbox" [checked]="item.done" (change)="toggle(item)" /><span [class.done]="item.done">{{ item.title }}</span><button (click)="remove(item)">🗑</button></li>
</ul>

app.component.css

.done { text-decoration: line-through; color: #888; }
li   { margin: 4px 0; }

 

概念代码位置说明
组件 (Component)AppComponentUI 单元 + 逻辑
模板 (Template)app.component.htmlHTML + Angular 指令 (*ngFor, [(ngModel)])
服务 (Service)TodoService业务数据与方法,注入到组件
注入 (DI)constructor(public todo: TodoService)将服务注入组件
双向绑定[(ngModel)]="newTitle"表单输入 ↔ 组件字段
事件绑定(click)="add()"用户操作触发方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85288.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85288.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85288.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Linux 系统中通过 yum 安装 Sublime Text

在 Linux 系统中通过 yum 安装 Sublime Text 的步骤如下&#xff1a; ​步骤 1&#xff1a;导入 GPG 公钥​ sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg 这一步用于验证软件包的合法性。 ​步骤 2&#xff1a;添加 Sublime Text 的软件仓…

面向自主多星对地观测的多智能体强化学习

大家读完觉的有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 近地轨道 &#xff08;LEO&#xff09; 卫星的指数级增长彻底改变了地球观测 &#xff08;EO&#xff09; 任务&#xff0c;解决了气候监测、灾害管理等方面的挑战。然而&#xff0c;多卫星系统…

flutter 短视频相关插件选型

​插件名称​​核心优势​​缺点​​短视频场景适用性​​推荐指数​​video_player​ (官方基础库)• 官方维护&#xff0c;跨平台兼容性最佳&#xff08;iOS/Android/macOS&#xff09; • 轻量级&#xff0c;无额外依赖&#xff0c;启动速度快 • 支持本地/网络视频、基础播…

QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate)

文章目录 1. QT中的MVD模式2. View3. Model4. Delegate5. 以TableView为例 1. QT中的MVD模式 模型视图委托&#xff08;MVD&#xff09;是Qt中特有的设计模式&#xff0c;类似MVC设计模式&#xff0c;将MVC设计模式中的Controller当做MVD中的Delegate&#xff0c;两者的概念基…

uni-app总结3-项目新建运行调试

一、新建项目 通过HbuilderX新建 在点击工具栏里的文件 -> 新建 -> 项目&#xff08;快捷键CtrlN&#xff0c;MacOS上是CMD N&#xff09;&#xff1a; 左测Tab选择uni-app类型&#xff0c;输入工程名&#xff0c;选择模板&#xff0c;Vue版本选择3&#xff0c;其他不…

LeetCode 每日一题打卡|若谷的刷题日记 4day--移动零

移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1&#xff1a; 输入: nums [0,1,0,3,12] 输出: [1,3,1…

简历模板3——数据挖掘工程师5年经验

姓名 / Your Name 数据挖掘工程师 | 5年经验 | 推荐/画像/反欺诈 &#x1f4de; 138-XXXX-XXXX | ✉️ your.emailexample.com | &#x1f310; github.com/yourname | &#x1f4cd; 北京 &#x1f3af; 个人简介 / Summary 5年大厂数据挖掘工程经验&#xff0c;硕士学历&am…

Vue添加图片作为水印

直接上代码 把图片作为水印 <div class"info-warp"><div class"image-container"><img src"https://img.shetu66.com/2023/06/28/1687920981963810.png" /><div class"watermark-layer"><imgv-for"…

Conda 常用命令大全:从入门到高效使用

Conda 常用命令大全&#xff1a;从入门到高效使用 Conda 是 Python 生态中最流行的环境管理工具之一&#xff0c;它不仅可以管理 Python 包&#xff0c;还能创建隔离的虚拟环境&#xff0c;适用于数据分析、机器学习、科学计算等场景。本文将介绍 Conda 的常用命令&#xff0c…

【系统更新】TDuckX2.7升级!DSL逻辑、自定义Webhook、AI考试来袭

No.1 支持自定义 DSL 公式 逻辑规则支持自定义 DSL&#xff0c;通过公式表达式构建复杂逻辑条件&#xff0c;能够支持选项、矩阵、自增表单中的内容控制&#xff0c;可以满足多变业务场景&#xff0c;极大提升了逻辑配置的灵活性。 No.2 扩展值新增“名称字段” 在批量生成扩…

安卓9.0系统修改定制化____深入解析安卓 9.0 各手机分区:功能、作用与差异 基础篇二

在安卓 9.0 系统中,手机内部存储被划分为多个不同的分区,每个分区都承担着独特且重要的职责。深入了解这些分区,对于我们理解安卓系统运行机制、进行系统优化,甚至是刷机等操作都有着极大的帮助。尤其是rom定制与修改方面。 通过博文了解💝💝💝 1💝💝💝-----了…

自动驾驶技术路线之争:视觉派、激光雷达派与融合派,谁将引领未来?

自动驾驶的赛道上&#xff0c;科技巨头、传统车企和初创公司纷纷亮出“看家本领”。但你是否注意到&#xff0c;不同玩家的“眼睛”和“大脑”配置大相径庭&#xff1f;特斯拉CEO马斯克曾称“激光雷达是徒劳的拐杖”&#xff0c;而国内华为、小鹏等企业则坚定拥抱激光雷达。这背…

Spring Cloud Alibaba 中间件

Spring Cloud Alibaba 中间件 &#x1f517; Spring官方介绍 [⚠️Spring官方对Spring Cloud Alibaba的更新不及时] &#x1f517; Spring Cloud Alibaba官网 &#x1f4dd; 代码记录 Nacos&#xff08;服务注册与发现&#xff09; Nacos(Dynamic Naming and Configuration…

uniapp+vue中 多次触发onLoad/created

控制台log输出为何频频失踪?   wxss代码为何频频失效?   wxml布局为何乱作一团?   究竟是道德的沦丧?还是人性的缺失?   让我们一起来 走 跑进科学 前言 uniapp中开发网页h5&#xff0c;莫名其妙每次请求接口都会执行两次&#xff0c;仔细排查发现是onLoadonShow…

[论文阅读] 人工智能+软件工程 | 软件工程中非代码工作的LLM能力评估

软件工程中非代码工作的LLM能力评估 论文信息 misc{2506.10833v1,title{Evaluating Large Language Models on Non-Code Software Engineering Tasks},author{Fabian C. Pea and Steffen Herbold},year{2025},eprint{2506.10833},archivePrefix{arXiv},primaryClass{cs.SE} }…

Data URI Scheme 详解:将数据嵌入 URL 的技术方案

一、Data URI Scheme 是什么&#xff1f; Data URI 是一种特殊的URL格式&#xff0c;允许将数据&#xff08;如图像、文本、音频等&#xff09;直接嵌入到URL中&#xff0c;而无需引用外部资源。它由RFC 2397标准定义&#xff0c;常用于前端开发中减少HTTP请求次数&#xff0c…

基于Redis方案的分布式锁的Java实现

前期&#xff0c; 我们介绍了什么是分布式锁及分布式锁应用场景&#xff0c; 今天我们基于Redis方案来实现分布式锁的应用。 1. 基于Redis分布式锁方案介绍 基于Redis实现的分布式锁是分布式系统中控制资源访问的常用方案&#xff0c;利用Redis的原子操作和高性能特性实现跨进…

Kafka源码P2-生产者缓冲区

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 1 引言2 缓冲区2.1 消息在Partition内有序2.2 批…

力扣网C语言编程题:三数之和

一. 简介 本文记录力扣网上的逻辑编程题&#xff0c;涉及数组方面的&#xff0c;这里记录一下 C语言实现和Python实现。 二. 力扣网C语言编程题&#xff1a;三数之和 题目&#xff1a;三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nu…

2.2 Windows MSYS2编译FFmpeg 4.4.1

一、安装编译工具 # 更换pacman源 sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist* pacman -Sy# 安装依赖 pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-ya…