Angular权威教程

Angular权威教程 pdf epub mobi txt 电子书 下载 2025

[美] 阿里·勒纳(Ari Lerner) 著,Nice Angular社区 译
图书标签:
  • Angular
  • 前端开发
  • JavaScript
  • TypeScript
  • Web开发
  • 框架
  • 教程
  • 编程
  • 软件开发
  • Angular教程
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115451583
版次:2
商品编码:12176534
包装:平装
丛书名: 图灵程序设计丛书
开本:16开
出版时间:2017-03-01
用纸:胶版纸
页数:493
正文语种:中文

具体描述

产品特色

编辑推荐

* 强力的IDE支持+完善的生态圈+一套代码、多种平台+……=Angular
* 知名全栈开发工程师经验总结
* 雪狼组织的Nice Angular社区主力倾情翻译
* Google推荐阅读
本书内容循序渐进,帮你在短时间内毫不费力地掌握整个Angular框架并打好坚实的基础,工作效率获得极大的提升。
书中包含丰富的示例应用,展示如何编写组件、如何使用表单和API,还会带你学习如何使用Angular创建:
- 基于组件的仿制版Reddit
- 使用RxJS可观察对象的实时聊天应用
- “随敲随搜”的YouTube搜索应用
- 带有可播放乐曲预览的Spotify曲目搜索应用

内容简介

本书堪称Angular领域的里程碑式著作,涵盖了关于Angular的几乎所有内容。对于没有经验的人,本书平实、通俗的讲解,递进、严密的组织,可以让人毫无压力地登堂入室,迅速领悟新一代Web应用开发的精髓。如果你有相关经验,那本书对Angular概念和技术细节的全面剖析,以及引人入胜、切中肯綮的讲解,将帮助你彻底掌握这个框架,在自己职业技术修炼之路上更进一步。

作者简介

Ari Lerner
全栈工程师,拥有多年Angular经验,自办并运营Angular电子报ng-newsletter.com,在知名硅谷工程师培训学校Hack Reactor担任AngularJS讲师。Fullstack.io创始人。

Felipe Coury
Gistia Labs联合创始人兼CTO。

Nate Murray
全栈工程师,曾任职于IFTTT,拥有数据挖掘和增量Web服务等方面的背景。

Carlos Taborda
Gistia Labs联合创始人兼主管。

目录

第1章 编写你的第一个Angular Web应用  1
1.1 仿制Reddit网站 1
1.2 起步 3
1.2.1 TypeScript 3
1.2.2 angular-cli 3
1.2.3 示例项目 4
1.3 运行应用 7
1.3.1 制作Component 8
1.3.2 导入依赖 9
1.3.3 Component注解 10
1.3.4 用templateUrl添加模板 11
1.3.5 添加template 11
1.3.6 用styleUrls添加CSS样式 12
1.3.7 加载组件 12
1.4 把数据添加到组件中 13
1.5 使用数组 15
1.6 使用UserItemComponent组件 18
1.6.1 渲染UserItemComponent 18
1.6.2 接收输入 19
1.6.3 传入Input值 20
1.7 “启动”速成班 21
1.8 扩展你的应用 22
1.8.1 添加CSS 24
1.8.2 应用程序组件 24
1.8.3 添加互动 26
1.8.4 添加文章组件 29
1.9 渲染多行 36
1.9.1 创建Article类 36
1.9.2 存储多篇文章 40
1.9.3 使用inputs配置ArticleComponent 41
1.9.4 渲染文章列表 42
1.10 添加新文章 44
1.11 最后的修整 44
1.11.1 显示文章所属的域名 44
1.11.2 基于分数重新排序 45
1.12 全部代码 45
1.13 总结 45
1.14 获得帮助 46
第2章 TypeScript 47
2.1 Angular是用TypeScript构建的 47
2.2 TypeScript提供了哪些特性 48
2.3 类型 49
2.4 内置类型 50
2.4.1 字符串 50
2.4.2 数字 50
2.4.3 布尔类型 51
2.4.4 数组 51
2.4.5 枚举 51
2.4.6 任意类型 52
2.4.7 “无”类型 52
2.5 类 52
2.5.1 属性 52
2.5.2 方法 53
2.5.3 构造函数 54
2.5.4 继承 55
2.6 工具 57
2.6.1 胖箭头函数 57
2.6.2 模板字符串 58
2.7 总结 59
第3章 Angular的工作原理 60
3.1 应用 60
3.1.1 主导航组件 61
3.1.2 面包屑导航组件 61
3.1.3 产品列表组件 62
3.2 产品数据模型 64
3.3 组件 64
3.4 组件注解 66
3.4.1 组件selector 66
3.4.2 组件template 67
3.4.3 添加产品 67
3.4.4 用模板绑定来查看产品 68
3.4.5 添加更多产品 69
3.4.6 选择一个产品 70
3.4.7 用列出产品 73
3.5.1 设置ProductsList的@Component配置项 73
3.5.2 组件的输入 74
3.5.3 组件的输出 77
3.5.4 触发自定义事件 78
3.5.5 编写ProductsList的控制器类 79
3.5.6 编写ProdctsList的视图模板 81
3.6 产品条目组件 83
3.6.1 产品条目的组件配置 83
3.6.2 产品条目组件的定义类 84
3.6.3 产品条目组件的template 84
3.6.4 完整的ProductRow代码清单 85
3.8 价格展示组件 86
3.9 产品分类组件 87
3.10 创建NgModule并启动应用 88
3.11 完整的项目 89
3.12 关于数据架构的一点说明 90
第4章 内置指令 91
4.1 简介 91
4.2 ngIf 91
4.3 ngSwitch 92
4.4 ngStyle 93
4.5 ngClass 95
4.6 ngFor 98
4.7 ngNonBindable 102
4.8 总结 102
第5章 Angular中的表单 103
5.1 表单——既重要,又复杂 103
5.2 FormControl和FormGroup 103
5.2.1 FormControl 104
5.2.2 FormGroup 104
5.3 我们的第一个表单 105
5.3.1 加载FormsModule 106
5.3.2 简易SKU表单:@Component注解 107
5.3.3 简易SKU表单:template 107
5.3.4 简易SKU表单:组件定义类 110
5.4 使用FormBuilder 111
5.5 响应式表单 FormBuilder 112
5.5.1 使用FormBuilder 112
5.5.2 在视图中使用myForm 113
5.5.3 试试看 114
5.6 添加验证 115
5.6.1 显式地把sku设置为实例变量 116
5.6.2 自定义验证器 120
5.7 监听变化 121
5.8 ngModel 122
5.9 总结 124
第6章 HTTP 125
6.1 简介 125
6.2 使用@angular/http 126
6.3 基本请求 127
6.3.1 构建SimpleHTTPComponent的@Component 127
6.3.2 构建SimpleHTTPComponent的template 128
6.3.3 构建SimpleHTTPComponent控制器 128
6.3.4 完整的SimpleHTTPComponent 130
6.4 编写YouTubeSearchComponent 130
6.4.1 编写SearchResult 132
6.4.2 编写YouTubeService 132
6.4.3 编写SearchBox 140
6.4.4 编写SearchResultComponent 145
6.4.5 编写YouTubeSearchComponent 147
6.5 @angular/http API 150
6.5.1 发起一个POST请求 150
6.5.2 PUT/PATCH/DELETE/HEAD 150
6.5.3 RequestOptions 151
6.6 总结 151
第7章 路由 152
7.1 为什么需要路由 152
7.2 客户端路由的工作原理 153
7.2.1 初级阶段:使用锚标记 153
7.2.2 进化:HTML5客户端路由 154
7.3 编写第一个路由配置 155
7.4 Angular路由的组成部件 155
7.4.1 导入 155
7.4.2 路由配置 155
7.4.3 安装路由配置 156
7.4.4 使用调用RouterOutlet指令 157
7.4.5 使用[routerLink]调用routerLink指令 158
7.5 整合 159
7.5.1 创建组件 160
7.5.2 应用程序组件 161
7.5.3 配置路由 163
7.6 路由策略 164
7.7 路径定位策略 165
7.8 运行应用程序 165
7.9 路由参数 167
7.10 音乐搜索应用 168
7.10.1 首要步骤 169
7.10.2 SpotifyService 170
7.10.3 SearchComponent 171
7.10.4 尝试搜索 179
7.10.5 TrackComponent 180
7.10.6 音乐搜索应用小结 182
7.11 路由器钩子 182
7.11.1 AuthService 183
7.11.2 LoginComponent 184
7.11.3 ProtectedComponent组件和路由守卫 186
7.12 嵌套路由 190
7.12.1 配置路由 191
7.12.2 ProductsComponent组件 191
7.13 总结 194
第8章 依赖注入 195
8.1 注入示例:PriceService 196
8.2 “别打给我们……” 197
8.3 依赖注入的部件 199
8.4 尝试注入器 200
8.5 用NgModule提供依赖 201
8.6 提供者 202
8.6.1 使用类 202
8.6.2 使用工厂 203
8.6.3 使用值 205
8.6.4 使用别名 205
8.7 应用中的依赖注入 205
8.8 使用注入器 207
8.9 替换值 211
8.10 NgModule 215
8.10.1 NgModule与JavaScript模块 215
8.10.2 编译器与组件 215
8.10.3 依赖注入与提供者 216
8.10.4 组件可见性 217
8.10.5 指定提供者 218
8.11 总结 219
第9章 Angular数据架构 220
第10章 使用可观察对象的数据架构,第1 部分:服务 222
10.1 可观察对象和RxJS 222
10.1.1 注意:一些必备的RxJS相关知识 222
10.1.2 学习响应式编程和RxJS 223
10.2 聊天应用概览 224
10.2.1 组件 225
10.2.2 数据模型 226
10.2.3 服务 226
10.2.4 总结 226
10.3 实现数据模型 227
10.3.1 User 227
10.3.2 Thread 227
10.3.3 Message 228
10.4 实现UserService 228
10.4.1 currentUser流 229
10.4.2 设置新用户 230
10.4.3 UserService.ts 231
10.5 MessagesService 231
10.5.1 newMessages流 231
10.5.2 messages流 233
10.5.3 操作流模式 233
10.5.4 共享流 234
10.5.5 把Message对象添加到messages流中 235
10.5.6 完整的MessagesService 238
10.5.7 试用MessagesService 241
10.6 ThreadsService 242
10.6.1 当前一组Thread 的映射(threads流) 242
10.6.2 按时间逆序排列的Thread列表(orderedthreads流) 246
10.6.3 当前已选的Thread(currentThread流) 246
10.6.4 当前已选Thread的Message列表(currentThreadMessages流) 248
10.6.5 完整的ThreadsService 250
10.7 总结 251
第11章 使用可观察对象的数据架构,第2部分:视图组件 252
11.1 构建视图:顶层组件ChatApp 252
11.2 ChatThreads组件 254
11.2.1 ChatThreads控制器 255
11.2.2 ChatThreads的template 256
11.3.1 ChatThread控制器和ngOnInit 257
11.3.2 ChatThread的template 258
11.3.3 ChatThread的完整代码 258
11.4 ChatWindow组件 259
11.4.1 ChatWindow组件类属性 260
11.4.2 ChatWindow的ngOnInit 261
11.4.3 ChatWindow的sendMessage 261
11.4.4 ChatWindow的onEnter 262
11.4.5 ChatWindow的scrollToBottom 262
11.4.6 ChatWindow 的template 263
11.4.7 处理键盘动作 264
11.4.8 使用ngModel 264
11.4.9 点击Send按钮 265
11.4.10 完整的ChatWindow组件 267
11.5.1 设置incoming属性 268
11.5.2 ChatMessage的template 270
11.6 ChatNavBar组件 273
11.6.1 ChatNavBar的@Component 273
11.6.3 ChatNavBar的template 274
11.6.4 完整的ChatNavBar组件 275
11.7 总结 276
11.8 更进一步 277
第12章 基于TypeScript的Redux简介 278
12.1 Redux 279
12.2 Redux核心概念 280
12.2.1 reducer是什么 280
12.2.2 定义Action和Reducer的接口 281
12.2.3 创建第一个Reducer 281
12.2.4 运行第一个Reducer 282
12.2.5 使用action调整计数器 283
12.2.6 reducer的switch 284
12.2.7 action的“参数” 285
12.3 保存state 286
12.3.1 使用store 287
12.3.2 使用subscribe进行通知 287
12.3.3 Redux核心 290
12.4 消息应用 291
12.4.1 消息应用的state 291
12.4.2 消息应用的action 292
12.4.3 消息应用的reducer 292
12.4.4 试用action 295
12.4.5 action creator 296
12.4.6 使用真正的Redux 297
12.5 在Angular中使用Redux 299
12.6 规划应用 299
12.7 组建Redux 300
12.7.1 定义应用的state 300
12.7.2 定义reducer 301
12.7.3 定义action creator 301
12.7.4 创建store 302
12.8 CounterApp组件 303
12.9 提供store 304
12.10 启动应用 305
12.11 CounterComponent 306
12.11.1 import 306
12.11.2 模板 306
12.11.3 constructor 307
12.11.4 整合 308
12.12 更进一步 310
12.13 参考资源 310
第13章 在Angular中引入Redux 312
13.1 阅读背景 312
13.2 聊天应用概览 313
13.2.1 组件 313
13.2.2 数据模型 314
13.2.3 reducer 315
13.2.4 总结 315
13.3 实现数据模型 315
13.3.1 User 315
13.3.2 Thread 316
13.3.3 Message 316
13.4 应用的state 316
13.4.1 关于代码布局 317
13.4.2 根reducer 317
13.4.3 UserState 318
13.4.4 ThreadsState 318
13.4.5 可视化AppState 319
13.5 构建reducer(和action creator) 321
13.5.1 设置当前用户的action creator 321
13.5.2 UsersReducer:设置当前用户 321
13.5.3 会话和消息概览 322
13.5.4 添加新会话的action creator 322
13.5.5 添加新会话的reducer 323
13.5.6 添加新消息的action creator 324
13.5.7 添加新消息的reducer 325
13.5.8 选择会话的action creator 326
13.5.9 选择会话的reducer 327
13.5.10 reducer总结 328
13.6 构建Angular聊天应用 328
13.6.1 顶层组件ChatApp 330
13.6.2 ChatPage 330
13.6.3 容器型组件与展示型组件 332
13.7.1 Redux选择器 334
13.7.2 会话选择器 334
13.7.3 未读消息总数选择器 336
13.8 构建ChatThreads组件 336
13.8.1 ChatThreads控制器 337
13.8.2 ChatThreads的template 338
13.10 构建ChatWindow组件 340
13.10.1 ChatWindow的updateState() 341
13.10.2 ChatWindow的scrollToBottom() 342
13.10.3 ChatWindow的sendMessage 342
13.10.4 ChatWindow的onEnter 343
13.10.6 处理键盘动作 345
13.10.7 使用ngModel 345
13.10.8 点击Send按钮 345
13.11 ChatMessage组件 345
13.11.1 设置incoming属性 346
13.11.2 ChatMessage的template 346
13.12 总结 347
第14章 高级组件 349
14.1 样式 349
14.1.1 视图(样式)封装 351
14.1.2 Shadow DOM 封装 354
14.1.3 不使用封装 355
14.2 创建popup指令:引用并修改宿主元素 357
14.2.1 popup指令的结构 357
14.2.2 使用ElementRef 359
14.2.3 绑定到host属性 360
14.2.4 添加按钮并使用exportAs 363
14.3.1 改变host属性的CSS类 364
14.3.2 使用ng-content 364
14.4 查询相邻的指令:编写标签页 366
14.4.1 Tab组件 367
14.4.2 Tabset组件 367
14.4.3 使用Tabset 369
14.5 生命周期钩子 370
14.5.1 OnInit和OnDestroy 371
14.5.2 OnChanges 374
14.5.3 DoCheck 378
14.5.4 AfterContentInit、AfterViewInit、AfterContentChecked和AfterViewChecked 386
14.6 高级模板 391
14.6.1 重写ngIf:ngBookIf 392
14.6.2 重写ngFor:ngBookRepeat 394
14.7 变更检测 398
14.7.1 自定义变更检测 401
14.7.2 Zones 405
14.7.3 可观察对象和OnPush 406
14.8 总结 409
第15章 测试 410
15.1 测试驱动? 410
15.2 端对端测试与单元测试 411
15.3 测试工具 411
15.3.1 Jasmine 411
15.3.2 Karma 412
15.4 编写单元测试 412
15.5 Angular单元测试框架 412
15.6 测试前准备 413
15.7 测试服务类和HTTP 415
15.7.1 HTTP要点 416
15.7.2 伪装 417
15.7.3 模拟 417
15.7.4 Http MockBackend 418
15.7.5 TestBed.configureTestingModule和提供者 418
15.7.6 测试getTrack方法 419
15.8 测试组件间的路由 424
15.8.1 为测试创建路由器 424
15.8.2 模拟依赖 427
15.8.3 探子 427
15.9 回到测试代码 429
15.9.1 fakeAsync和advance 431
15.9.2 inject 432
15.9.3 测试ArtistComponent组件初始化 432
15.9.4 测试ArtistComponent方法 433
15.9.5 测试ArtistComponent DOM模板值 434
15.10 测试表单 436
15.10.1 创建一个ConsoleSpy 438
15.10.2 安装ConsoleSpy 439
15.10.3 配置测试模块 439
15.10.4 测试表单 440
15.10.5 重构表单测试 441
15.11 测试HTTP请求 444
15.11.1 测试POST方法 445
15.11.2 测试DELETE方法 446
15.11.3 测试HTTP头 447
15.11.4 测试YouTubeService 448
15.12 总结 452
第16章 把AngularJS应用升级到Angular 453
16.1 周边概念 453
16.2 我们要构建什么 454
16.3 把AngularJS映射到Angular 455
16.4 关于互操作性的需求 456
16.5 AngularJS应用 456
16.5.1 AngularJS应用的HTML 458
16.5.2 代码概览 458
16.5.3 AngularJS:PinsService 459
16.5.4 AngularJS:配置路由 460
16.5.5 AngularJS:HomeController 461
16.5.6 AngularJS:HomeController模板 461
16.5.7 AngularJS:pin指令 462
16.5.8 AngularJS:pin指令模板 463
16.5.10 AngularJS:AddController模板 465
16.5.11 AngularJS:总结 467
16.6 构建混合式应用 468
16.6.1 混合式应用的结构 468
16.6.2 引导混合式应用 471
16.6.3 我们要升级什么 473
16.6.4 插一小段内容:类型文件 479
16.6.6 使用Angular的PinControlsComponent 481
16.6.7 把Angular的PinControlsComponent 降级到AngularJS 482
16.6.8 用Angular添加图钉 483
16.6.9 把AngularJS的PinsService和$state升级到Angular 484
16.6.10 写Angular版的AddPinComponent 485
16.6.11 使用AddPinComponent 490
16.6.12 把Angular的服务暴露给AngularJS 490
16.6.13 实现AnalyticsService 491
16.6.14 把Angular的AnalyticsService降级到AngularJS 492
16.7 总结 493
16.8 参考资源 493

《前端开发实战:JavaScript、HTML5与CSS3精粹》 内容简介: 在数字信息爆炸的时代,网页和Web应用程序已成为人们获取信息、进行交互和参与社交活动的核心平台。它们不仅承载着丰富的内容,更是连接用户与世界的关键触点。本书《前端开发实战:JavaScript、HTML5与CSS3精粹》旨在为读者提供一套系统、深入且兼具实践性的前端开发知识体系,帮助您从零开始,逐步成长为一名合格乃至优秀的前端工程师。我们将抛开某些特定框架的束缚,专注于构建现代Web应用所必须的核心技术——JavaScript、HTML5和CSS3。本书不仅会讲解这些技术的语法和特性,更会深入探讨其背后的设计理念、最佳实践以及如何利用它们来构建高性能、响应式、用户体验卓越的Web界面。 第一部分:HTML5——构建坚实的内容骨架 HTML5是构建Web内容的基石,它在语义化、多媒体支持、表单增强以及离线存储等方面带来了革命性的进步。本书将从最基础的HTML文档结构入手,循序渐进地讲解HTML5的核心元素和属性。 语义化HTML的魅力: 我们将详细介绍HTML5引入的语义化标签,如`
`, `

用户评价

评分

这本书就像一位循循善诱的老师,用最清晰的逻辑和最贴切的比喻,把我带入了Angular的世界。从最基础的组件化开发,到复杂的依赖注入系统,再到强大的RxJS响应式编程,每一步都讲解得细致入微。我尤其喜欢它讲解组件通信的那一部分,它并没有简单罗列几种方法,而是深入分析了不同通信方式适用的场景,以及它们的优缺点,让我能够根据实际需求选择最合适的方式,避免了不必要的复杂性。而且,在讲解路由的时候,这本书不仅讲了如何配置路由,还深入探讨了路由守卫、懒加载等高级特性,让我明白如何构建高效、可维护的单页应用。最让我惊喜的是,它还花了相当大的篇幅讲解了Angular的测试,从单元测试到端到端测试,提供了非常实用的指导,让我意识到测试对于构建健壮应用的重要性。

评分

自从读了《Angular权威教程》之后,我感觉自己在Angular开发上的信心和能力都得到了质的飞跃。过去,我常常因为不熟悉某个概念而感到焦虑,现在,当我遇到一个新功能或者一个复杂的需求时,我能够从这本书中找到相应的知识点,并且能够快速地将其应用到我的项目中。它帮助我建立了一个完整的知识框架,让我知道Angular的各个部分是如何协同工作的,而不是孤立地看待每一个API。而且,这本书在讲解过程中,也时常会提及一些Angular的底层原理,比如变更检测机制、模板解析等,这些深入的讲解让我对Angular有了更深层次的理解,也更能写出性能更优、更健壮的代码。

评分

我原本以为像“权威教程”这样的书,可能会过于理论化,枯燥乏味,但《Angular权威教程》完全颠覆了我的看法。它在理论讲解的同时,穿插了大量精心设计的代码示例,并且这些示例都非常贴合实际开发中的常见场景。我一边阅读,一边跟着敲代码,感觉就像在和书中那位“老师”一起解决一个又一个实际问题。特别是当它讲解到异步操作和响应式编程时,那种层层递进的讲解方式,让我这个之前对RxJS一知半解的人,也逐渐领悟了其中的精髓。书中的一些小技巧和最佳实践,更是让我醍醐灌顶,解决了困扰我很久的一些开发难题。它不仅仅是告诉你怎么用Angular,更是告诉你如何“优雅”地用Angular。

评分

《Angular权威教程》不愧是“权威”二字。这本书的结构非常清晰,逻辑性极强,从入门到进阶,层层递进,非常适合不同水平的开发者。我特别欣赏它在讲解一些核心概念时,能够用通俗易懂的语言,结合生动的例子,把复杂的概念变得简单明了。它不仅仅是一本技术书籍,更像是一位经验丰富的导师,指引我如何在这个技术领域里走得更远。我发现,这本书所讲解的内容,不仅仅适用于Angular框架本身,其中蕴含的一些设计思想和开发理念,对于其他前端框架的学习和实践也同样具有指导意义。这让我觉得,投资这本书是非常值得的。

评分

这本书的名字叫《Angular权威教程》,当我拿到它的时候,心里是既期待又有点小小的忐忑。期待是因为,我知道Angular这个框架的强大之处,很多大型、复杂的Web应用都离不开它,而“权威教程”这个名字也确实给人一种吃了定心丸的感觉,仿佛它能把我从Angular的迷雾中解救出来。我之前接触过一些前端框架,也尝试过Angular的早期版本,但总感觉学习过程有些零散,不成体系,总是在遇到问题的时候才去查阅文档,效率不高,而且很容易陷入“知道了一点,但又什么都不精通”的尴尬境地。所以,我非常希望能有一本真正能够系统性地讲解Angular核心概念、设计理念以及最佳实践的书籍,能够帮助我构建起扎实的Angular知识体系,而不是仅仅停留在API的表面。我希望这本书能深入浅出地讲解Angular的生命周期、组件通信、服务、路由、表单处理、状态管理等方面,让我明白“为什么”要这么做,而不是仅仅告诉我“怎么”做。

评分

好好好好好好好好好好

评分

很好,很好,很好,很好,很好

评分

Angular权威教程 好评

评分

单位购书,还没有看,以后慢慢品读,京东送货速度超级快,好评好评。

评分

还不错

评分

很不错的书籍,买了很多本,包装很好,没有破损,快递很及时。

评分

翻译的太不仔细了!!!!!首章就有很多漏掉的代码!!!!!

评分

初学者不是太好。我没太看懂还不如那本开发下一代web

评分

讲的很全面,学习了。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有