Angular重要概念

Angular信号中的Effect函数:深入理解与实践 Effect函数在Angular中的应用非常灵活,但需要谨慎使用,特别是在涉及状态更新时。通过理解Effect的工作原理和正确使用,可以有效地管理应用的状态变化,提高代码的可维护性和性能。希望这个博客能够帮助你更好地理解和应用Effect函数。 阅读详情

Angular概念

在这里插入图片描述
在这里插入图片描述
不能把Angular当作黑盒来使用,要充分了解它的内部结构。

依赖注入

1、 什么是依赖注入?

2、依赖性注入框架

Angular
在这里插入图片描述
在angular中,我们只要记住依赖注入的三种角色:<font color=red size=4>使用者、服务(依赖对象)及注入器(Injector)</font>

  • @Injectable是@Component的子类

  • 每一个HTML标签上面都会有一个注射器实例

  • 注射是通过constructor(构造器)进行的


注入器(Injectable)和提供器(Provider)
在这里插入图片描述
3、依赖性注入进阶

什么时候使用装饰器:@Injectable( )

当创建服务(service)需要在构造函数中注入依赖对象,就需要使用 Injectable 装饰器。

延伸1:@Injectable() 是必须的么?

如果所创建的服务不依赖于其他对象,是可以不用使用 Injectable 类装饰器。但当该服务需要在构造函数中注入依赖对象,就需要使用 Injectable 装饰器。不过比较推荐的做法不管是否有依赖对象,在创建服务时都使用 Injectable 类装饰器。

延伸2:注入器的层级关系( 服务之间如何之间注入 )

  • 提供器可以声明在模块中,也可以声明在组件中。
  • 在angular中只有一种注入,那就是构造器注入。如发现无参构造器,这就说明这个组件没有被注入任何东西。

ChangeDeteccion

检测程序内部状态,然后反映到UI上

引起状态变化(异步):

  • Events
  • XHR
  • Times

指令

组件是一种特殊的指令(组件是一种带模板的指令)

  • 结构型指令 --改变元素的布局
  • 属性型指令 --改变外观和行为

属性型指令

Renderer 2 和 ElementRef

Angular 不提倡直接操作DOM

对于DOM的操作应该通过Renderer 2来进行

ElementRef 可以理解成指向DOM元素的引用

结构型指令

样式

ngClass,ngStyle,[class.yourstyle]

ngClass: 用于条件动态指定样式类,适合对样式做大量更改的情况

ngStyle: 用于条件动态指定样式,适合少量更改的情况

[class.yourcondition]=“condition” : 直接对应一个条件

延伸1: <ng-template>与 <ng-container> 有什么区别?

<ng-template> 用于定义模板,使用 * 语法糖的结构指令,最终都会转换为 <ng-template> 模板指令,模板内的内容如果不进行处理,是不会在页面中显示

<ng-container> 是一个逻辑容器,可用于对节点进行分组,但不作为 DOM 树中的节点,它将被渲染为 HTML中的 comment 元素,它可用于避免添加额外的元素来使用结构指令。

小贴士:

ng-container既不是一个Component,也不是一个Directive,只是单纯的一个特殊tag。

这点类似于template,Angular复用了HTML5规范中template 的tag的语义,不过并没有真正利用其实现,因此在审查元素中是永远也找不到一个template元素的。 
不过,由于ng-container并不是HTML5中的,为了保持区分度,采用了ng-作为前缀。所以现在我们可以知道,ng-container是Angular所定义的一个特殊tag。

延伸2:不要混淆 ng-container 与 ng-content

ng-content 是一个占位符,有些类似于router-outlet

拓展1: 那为什么要是使用ng-content?什么场景使用呢?

答:   父组件包含子组件都是直接指明子组件的selector,比如子组件的selector叫app-child,那么嵌入父组件时直接指明即可:<app-child></app-child>

   这是很硬性的编码,而ng-content就是用来替代这种硬性编码的。

延伸3: TemplateRef 与 ViewContainerRef 有什么作用?

  • TemplateRef:用于表示内嵌的 template 模板元素,通过 TemplateRef 实例,我们可以方便创建内嵌视图(Embedded Views),且可以轻松地访问到通过 ElementRef 封装后的 nativeElement。需要注意的是组件视图中的 template 模板元素,经过渲染后会被替换成 comment 元素。

  • ViewContainerRef:用于表示一个视图容器,可添加一个或多个视图。通过 ViewContainer
    Ref 实例,我们可以基于 TemplateRef 实例创建内嵌视图,并能指定内嵌视图的插入位置,也可以方便对视图容器中已有的视图进行管理。简而言之,ViewContainerRef 的主要作用是创建和管理内嵌视图或组件视图。

延伸4: ViewChild和ViewChildren

ViewChild 该装饰器用于获取模板视图中的元素或直接调用其组件中的方法。它支持 Type 类型或 string 类型的选择器,同时支持设置 read 查询条件,以获取不同类型的实例。比如ElementRef和ViewContainerRef.

ViewChildren 该装饰器是用来从模板视图中获取匹配的多个元素,返回的结果是一个 QueryList 集合。

在这里插入图片描述

通信

  • 父子组件通信

    • 父子组件通信一般使用@Input和@Output即可实现.
    • 通过Subject
  • 非父子组件通信

    • 非父子组件见通信可以通过同一个service来实现。需要注意的是一定要在service中定义一个临时变量来供传递

模块

什么是模块?

declarations: 模块内部Components/Directives/Pipes的列表,声明一下这个模块内部成员(本模块创建的组件,加入到这个元数据中的组件才会被编译)

imports: 导入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的组件中被使用。比如导入CommonModule后就可以使用NgIf、NgFor等指令。(引入的外部NG模块)

exports: 用来控制将哪些内部成员暴露给外部使用。导入一个module并不意味着会自动导入这个module内部导入的module所暴露出的公共成员。除非导入的这个module把它内部导入的module写到exports中。
在这里插入图片描述

providers: 指定应用程序的根级别需要使用的service。(Angular2中没有模块级别的service,所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中)

bootstrap: 通常是app启动的根组件,一般只有一个component。bootstrap中的组件会自动被放入到entryComponents中。(声明启动引导哪个组件,必须是编译过的组件)

    需要强调的是,bootstrap元数据声明的组件必须是编译过的组件:它要么属于 使用imports元数据引入的外部NG模块,要么是已经在declarations元数据 中声明的本地组件。

entryCompoenents: 不会再模板中被引用到的组件。这个属性一般情况下只有ng自己使用,一般是bootstrap组件或者路由组件,ng会自动把bootstrap、路由组件放入其中。 除非不通过路由动态将component加入到dom中,否则不会用到这个属性。

模块的元数据?

@NgModule元数据告诉Angular编译器要为当前模块编译哪些组件,以及如何把当前模块和其它模块链接起来。

经常看到的forRoot()是什么鬼?

静态方法forRoot是一个约定,它可以让开发人员更轻松的配置模块的提供商。

RouterModule.forRoot就是一个很好的例子。 应用把一个Routes对象传给RouterModule.forRoot,为的就是使用路由配置全应用级的Router服务。 RouterModule.forRoot返回一个ModuleWithProviders对象。 我们把这个结果添加到根模块AppModule的imports列表中。

只能在应用的根模块AppModule中调用并导入.forRoot的结果。 在其它模块中导入它,特别是惰性加载模块中,是违反设计目标的并会导致一个运行时错误。

RouterModule也提供了静态方法forChild,用于配置惰性加载模块的路由。

forRoot和forChild都是方法的约定名称,它们分别用于在根模块和特性模块中配置服务。

Angular并不识别这些名字,但是Angular的开发人员可以。 当你写类似的需要可配置的服务提供商时,请遵循这个约定。

模板型驱动表单 和 响应式表单

  • 模板型驱动表单

特点

1、表单的数据绑定(例如ngModel的双向绑定)
2、ngModel的困惑

  • 响应式表单

三个重要元素:

  • FormControl
  • FormGroup
  • FormBuilder

路由

名称简介
Routes路由配置,保存着那个URL对应展示哪个组件,以及在哪个RouterOutlet中展示组件
RouterOutlet在Html中标记路由呈现位置的占位符指令
Router负责在运行时执行路由的对象,可以通过调用器navigate() 和navigateByUrl()方法来导航到一个指定的路由
RouterLink在Html中声明路由导航用的指令
ActivedRoute当前激活的路由对象,保存着当前路由的信息,如路由地址,路由参数等

Routes 其实是一个Route类的数组。
在这里插入图片描述

而Route的参数如下图所示,一般情况下,path和component是必选的两个参数。比如:path:/a,component:A则说明,当地址为/a时,应该展示组件A的内容。
在这里插入图片描述
其余类的简介见下图:
在这里插入图片描述

延伸1: 路由参数传递 – 参数传递的几种方式

  • 普通方式传递数据:/product?id=1&name=iphone => ActivatedRoute.queryParams[id];
  • rest方式传递数据:{path:/product/:id} => /product/1 => ActivatedRoute.params[id];
  • 路由配置传递数据:{path:/product,component:ProductComponent,data:[{madeInChina:true}]} => ActivatedRoute.data[0][madeInChina];

数据绑定、响应式编程和管道、@Input()与@Output()

数据绑定: Angular中的数据绑定指的是同一组件中控制器文件(.ts)与视图文件(.html)之间的数据传递。

  • 单向绑定: 它的意思是要么是ts文件为html文件赋值,要么相反。

在这里插入图片描述

  • 双向绑定: ts文件与html文件中绑定的值同时改变。
DOM属性和HTML属性
  • 1、少量 HTML 属性 和 DOM 属性之间有着1:1的映射,如id。(HTML元素属性和DOM属性的名称和值大部分都相同)

  • 2、有些HTML属性没有对应的DOM属性,如 colspan

  • 3、有些DOM属性没有对应的HTML属性,如textContent。有些名字相同,HTML属性和DOM属性的值也不是同一样东西。

  • 4、HTML属性的值指定了初始值;DOM属性的值标识当前值。DOM属性的值可以改变;HTML属性的值不能改变。

  • 5、模板绑定是通过DOM属性和时间来工作的,而不是 HTML 属性。

DOM属性绑定

HTML属性绑定

在这里插入图片描述
DOM绑定与HTML属性绑定的区别

DOM绑定HTML绑定
相同情况下一个元素的id
有html属性无dom属性表格中td的colspan
有dom属性无html属性textContent属性
关于值dom表示当前值html表示初始化值
关于可变dom值是可变的html值是不可变的

总结:我们模板绑定是通过DOM属性来操作的,不是HTML属性来操作的

类绑定

在这里插入图片描述

样式绑定

在这里插入图片描述

模板变量

在这里插入图片描述

Angular中的输入输出是通过注解@Input和@Output来标识,它位于组件控制器的属性上方。输入输出针对的对象是父子组件。

RxJS

Redux

1、Redux 是什么?

全局的、唯一的、不可变的内存状态[数据库]
在这里插入图片描述

Angular 整合Redux

导入NgRedux

在这里插入图片描述

构造参数为store的构造器

在这里插入图片描述

在你的组件(components)中使用store

在这里插入图片描述

注入Actions

Accessing(访问) Services from Actions

在这里插入图片描述

Dispatching(调度、派遣) Actions

在这里插入图片描述

目前Angular整合Redux两种方式:

  • Ng-redux 核心仍使用 Redux,增加對 Angular 的支援

  • Ngrx 只有概念使用 Redux,核心完全使用 RxJS 重新操作。

安裝 Ngrx

npm install @ngrx/core @ngrx/store --save

在这里插入图片描述
在这里插入图片描述

View 相当于component,主要在显示使用者界面。

Action 当component 有任何 event 時,会对 Ngrx 发出 action。

Middleware 负责存取对 server 端的 API

Dispatcher 负责接受 component 传来的 action,并将 action 传给 reducer。

Store 可是为 Ngrx 在浏览器端的资料库,各 component 的资料都可统一放在这里。

Reducer 根据dispatcher 传来的 action,决定该如何写入state。

当 state 有改变时,將通知有subscribe该state的component自动更新。

State 存放在 store 內的资料。
在这里插入图片描述
有些东西Ngrx 已经帮我们做了,真的要我們自己操作只有 4 個部份,且资料流为单向的 : Component -> Action -> Reducer -> Store -> Component。

什么时候该使用Ngrx?

  • 当多个 component 需使用共用资料,且各 component 的操作会影像其他 component 的结果。
  • 资料可能同时被多个component修改,甚至同時被 server API修改。
  • 需要操作undo/redo 功能。

案例–操作:

新版迁移指南 :https://github.com/ngrx/platform/blob/master/MIGRATION.md

AppModule:app.module.ts

在这里插入图片描述
AppComponent :–> app.component.html、app.component.ts

在这里插入图片描述
Action :–> counter.action.ts
在这里插入图片描述
Reducer :–> counter.reducer.ts
在这里插入图片描述
Store :–> counter.store.ts
在这里插入图片描述

Redux 在您的Angular应用使用reselect进行状态函数的高阶运算

reselect:带‘记忆’功能的函数运算

无论多少参数,最后一个才是用于函数计算,其他的都是他的输入

export const getTasksWithOwner = createSelector(getTasks,getUserEntities,(tasks,entities) ={
   return tasks.map(task =>{
    const owner = entites[task.ownerId];
    const participants =task.participantIds.map(id => entites[id]);
    return Object.assgin({ },task,{owner:owner},{participants:[...participants]});
   });
})

使用@ngrx/store

在这里插入图片描述

Registering Reducers
在这里插入图片描述

简化:

示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6e72YlMI-1569936647386)(./images/038.png)]

什么是Effect?

@Effect( ) 标识是一个Observable流。


在这里插入图片描述

使用effect:import {Actions, Effect} from '@ngrx/effects';

@Injectable()
export class AuthEffects{
  // 通过构造注入需要的服务和 action 信号流
  constructor(private actions$: Actions, private authService: AuthService) { }
  
  //用 @Effect() 修饰器来标明这是一个 Effect
  @Effect() 
  login$: Observable<Action> = this.actions$ // action 信号流
    .ofType(authActions.ActionTypes.LOGIN) // 如果是 LOGIN Action
    .map(toPayload) // 转换成 action 的 payload 数据流
    .switchMap((val:{username:string, password: string}) => {
      // 调用服务
      return this.authService
          .login(val.username, val.password)
          // 如果成功发出 LOGIN_SUCCESS Action 交给其它 Effect 或者 Reducer 去处理
          .map(user => new authActions.LoginSuccessAction({user: user}))
          // 如果失败发出 LOGIN_FAIL Action 交给其它 Effect 或者 Reducer 去处理
          .catch(err => of(new actions.LoginFailAction(err)));
    });

}

顺序安装依赖库

$ npm i --save @ngrx/core
$ npm i --save @ngrx/store
$ npm i --save @ngrx/effects

/**
 * 我们使用reselect来实现高效的`state`存取操作。我们将使用`reselect`的
 * `createSelector`方法来创建高效的选择器,这个选择器能被存储且仅在参
 * 数更改的时候才会重构
 */
$ npm i --save reselect
 
 /**
  * 为了让开发更加方便并易于调试,我们添加能够在控制台记
  * 录action和state的更新的store-logger来帮助我们
  */
$ npm i --save ngrx-store-logger 

示例:

使用@ngrx/router-store

Navigation actions

示例:

使用@ngrx/store-devtools

注册到模块中

import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { environment } from '../environments/environment'; // Angular CLI environment

@NgModule({
  imports: [
    !environment.production ? StoreDevtoolsModule.instrument({ maxAge: 50 }) : []
  ]
})
export class AppModule {}

常出现的异常解决方案

1、多次声明同一个组件

组件是 Angular 应用程序中的常见构建块。每个组件都需要在 @NgModule.declarations 数组中声明,才能够使用。在 Angular 中是不允许在多个模块中声明同一个组件,如果一个组件在多个模块中声明的话,那么 Angular 编译器将会抛出异常。

场景使用 – 在多个模块中使用同一个组件是允许的

  • 如果一个模块作为另一个模块的子模块,那么针对上面的场景解决方案将是:

    • 在子模块的 @NgModule.declaration 中声 HeroComponent 组件
    • 通过子模块的 @NgModule.exports 数组中导出该组件
    • 在父模块的 @NgModule.imports 数组中导入子模块
  • 对于其它情况,我们可以创建一个新的模块(共享模块),如 SharedModule 模块。具体步骤如下:

    • 在 SharedModule 中声明和导出 HeroComponent
    • 在需要使用 HeroComponent 的模块中导入 SharedModule

2、angular: Error: Uncaught (in promise): Error: StaticInjectorError…

原因:构建的service没有添加到module里造成的 或者 service module没有在app 的module下引入。

3、core.js:1350 ERROR Error: Uncaught (in promise): Error: StaticInjectorError[Http]: StaticInjectorError[Http]: NullInjectorError: No provider for Http!

将HttpMoudle导入到我的app.module.ts中,问题就没有了

import { HttpModule } from '@angular/http';
Angular 基础入门——项目创建与模块概念 Angular 是一款功能强大的前端框架,由 Google 维护。它采用了模块化、组件化等先进的开发理念,适合构建大型企业级应用。下面我们从项目创建开始,学习 Angular 的基础入门知识,重点了解模块的概念。 阅读详情

相关推荐

【Mac+CLion+STM32+JLink】从零到一:在macOS上构建高效STM32开发与调试工作流

本文详细介绍了在macOS上使用CLion、STM32CubeMX和JLink搭建高效STM32开发与调试工作流的完整指南。从环境准备、CLion深度配置到STM32CubeMX工程实战,再到JLink烧录避坑和串口调试技巧,帮助开发者快速掌握Mac平台下的嵌入式开发全流程。

weixin_28278377的博客 254

代码即逻辑 -- 聊聊 Effects 及在 Angular 中的应用

大概去年9月左右,看过 Cycle.js 创作者 André Staltz 的一个视频:讲为什么 React 并不是一个响应式的框架,同时介绍了 Cycle.js。当时就觉得这个思路好牛叉,但一直有点似懂非懂。最近由于工作需要,在 Angular 中使用了 @ngrx/effects (这个是借鉴了 Cycle.js 的思路,把这种思路应用在 Angular 中),对这个模式有了些粗

MiuWing的博客 943

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5004

angular effects简明指南

@ngrx/effects angular4 effects

上食埃土,下饮黄泉 1773

解决群晖NAS无法拉取docker镜像问题

在2024-06-01日以前,使用SSH登录后是可以直接拉取docker镜像的;但是之后当我们使用SSH登录上群晖NAS,使用【sudo -i】切换到超管拉取镜像会提示报错【error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/cf/cff6b68a194a672fd337d8728bfb252071012cce6

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

Windows原生与WSL2环境下OpenClaw性能与兼容性的对比分析研究

本文对比分析了Windows原生环境与WSL2环境下运行OpenClaw的性能与兼容性。Windows原生环境提供深度系统集成、图形界面支持和硬件加速优势,适合需要Windows生态集成的用户;WSL2则提供接近原生Linux的性能体验,兼容Linux工具链,适合开发者和跨平台需求。文章详细介绍了两种环境下的推荐硬件配置、系统版本选择及必备工具,并提供了具体的部署步骤指南。研究表明,两种环境各有适用场景,用户可根据需求选择最适合的部署方式。

一键难忘的博客 1217

Angular 19 “要“ 来了⚡

表面上看,view 和 root effect 的执行时机是一样的,都是等待 microtask,但其实它们有微差,view effect 的 callback 不会立刻被 schedule (root effect 会),它会被压后到 refreshView 后才 schedule。比如说:我们在 App 组件内调用 effect,创建出来的 view effect node 会被保存到 App 的 parent LView (也就是 root LView) 的 [EFFECTS 23] 里。

weixin_55010563的博客 1906

从 OPEN CURSOR 到 SELECT INTO TABLE:把 ABAP 数据读取的底层机制与性能差异讲透

ABAP数据库访问性能优化关键点 摘要:ABAP程序性能的核心在于数据读取方式的选择。本文分析了三种常见数据库访问方式的技术原理:显式游标(CURSOR)、SELECT-ENDSELECT循环和SELECT INTO TABLE。重点揭示了数据从数据库到应用服务器的传输机制,包括OPEN/REOPEN与FETCH操作、Array Fetch批量传输原理以及SAP游标缓存机制。通过VBAK表的性能测试数据对比,证明了不同场景下最优访问方式的选择依据:大数据量时显式游标性能优势明显,而SELECT INTO T

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

带你初步了解Angular的全局状态管理ngrx

带你初步了解angular的全局状态管理ngrx

百世经纶『一页書』 3597

ModuleNotFoundError: No module named‘langchain.schema.output parserlangchain.schema is not a package

电脑里现有的langchain库版本与import所需的不同,卸载原有langchain,重新下载最新的langchain。在步骤1后,若仍不可运行。在确保已重新下载新langchain后,重启python后,可正常运行。在版本号中填入所需的langchain版本号,可在requirements.txt查看。运行如下代码时,出现error。

weixin_45751925的博客 1713

手把手教你学Simulink--基于高频与高速信号处理的滤波器场景实例:毫米波雷达中匹配滤波器的多目标分辨仿真

在自动驾驶、智能交通和工业感知等领域,毫米波雷达(mmWave Radar)因其高分辨率全天候工作和抗电磁干扰能力,成为关键的感知传感器。其核心信号处理算法之一是匹配滤波器(Matched Filter),用于在强噪声背景下最大化信噪比(SNR),实现对微弱目标的检测。在调频连续波(FMCW, Frequency-Modulated Continuous Wave)雷达中,发射信号为线性调频(Chirp)信号。当信号遇到多个目标时,回波是多个延迟版本的叠加。

MHD0815的博客 134

Angular基本概念及用法总结

本文将用最简约的语言介绍angular的基本概念及相关快捷指令等,便于开发者快速入门学习以及日常工作中的使用。(ps笔记内容源于b站学习资源观后整理及个人总结。)selector'./myc01.component.html',//或template}(3)使用已经注册过的组件(任意一个dom里,除了自己)...

weixin_44801414的博客 5982

rk3568 rk628桥片 rgb2hdmi

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 449

【Angular】核心概念介绍

Angular 的核心概念包括模块、组件、模板、指令、服务、依赖注入、路由、管道和生命周期钩子。这些概念为开发现代 Web 应用提供了强大且灵活的功能,使得开发者能够构建高度模块化、可维护的应用。模块:组织 Angular 应用的逻辑单元。组件:界面显示和用户交互的核心。模板:定义组件视图的 HTML 和 Angular 特性。指令:扩展 HTML 元素的功能。服务和依赖注入:分离逻辑并在组件之间共享功能。路由:实现单页面应用中的页面导航。管道:转换和格式化数据。生命周期钩子。

u013675821的博客 1040

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Angular的重要概念

@angular/core的主要功能

珎珎啊 1185

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Angular概念和TypeScript基础语法

什么是Angular Angular是构建用户界面的JavaScript框架;由 Google 开发和维护,主要被用来开发单页面应用程序。它的创新之处在于,通过数据绑定和依赖注入减少了大量代码,而这些都在浏览器端通过JavaScript实现,能够和任何服务器端技术完美结合。 Angular的出众之处 构建一个CRUD应用时可能用到的所有技术:数据绑定、基本模板指令、表单验证、路由、深度链接、...

weixin_41105030的博客 1541

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Angular 常用概念

1.模块与装饰器 Angular设计目标就是适应大型应用的开发,模块的概念就是来组织不同的组件及服务。一个大型应用的最终形态就是各种不同的模块的组合 import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform...

weixin_34129145的博客 145

【Angular架构】成为一名Angular架构师需要掌握的6个概念

每个Angular开发人员都应该深入探索六个概念,以便掌握Angular并设计出架构良好的应用程序。

全网:架构师研究会 1893

Angular 笔记1(Angular基本概念)

文章目录快速上手搭建环境Angular的基本概念模块组件服务与依赖注入模块简介@NgModule 元数据Angular 自带的库组件简介组件的元数据模板语法数据绑定管道指令结构型指令属性型指令服务与依赖注入简介服务范例依赖注入提供服务 快速上手 搭建环境 安装 Angular CLI npm install -g @angular/cli 创建工作空间和初始应用 ng new my-app 运行应用 ng serve --open –open(或者只用 -o 缩写)选项会自动打开你的浏览器

hequhecong10857的博客 499

[Angular]Angular基本概念

最近一段时间在研究Angular,今天算是倒腾的差不多了,来聊聊Angular的一些基本概念.

自由而不独立,仍是奴隶。 1303

Angular2的核心概念详解

2-1 组件及组件树 8个核心概念 组件 Components 元数据 Metadata 模板 Templates 数据绑定 Data binding 服务 Services 指令 Directives 依赖注入 Dependency Injection 模块 Modules 组件 组件要素 HTML、CSS、JavaScript 全生命周期支持 Constructor 构造器初始化 OnChanges 第一次触发数据变化钩子 OnInit 组件初始化(建议将和业务相关的初始化放到这里) OnChan

极客神殿 472

Angular2 一些概念杂谈

1.constructor 和 ngOnInit 的区别: (1)constructor 是 ES6 中类(class)的自身属性,和 Angular 无关,在页面初始化时就被调用; (2)ngOnInit 是属于 Angular 生命周期的一部分,在第一轮生命周期 ngOnChanges 完成之后调用,并且只调用一次,初始化指令/组件; (3)在 Angular 中,constructor...

Lazy_Life的博客 338

Angular核心概念

为什么80%的码农都做不了架构师?>>> ...

weixin_33727510的博客 267

Angular 2的核心概念

原文地址:http://victorsavkin.com/post/118372404541/the-core-concepts-of-angular-2 让我们来构建一个程序 组件(Component) Angular 2的应用是由一系列的组件构成的(ui element、route..),应用始终有一个包含其他组件的根组件,换句话每个angualr2应用都有一个组件树

mysql1234q的博客 766

Angular 的概念模型

既然如此,问题就来了,新版本的 Angular 的核心概念是什么呢? 非常简单,一切都是围绕着“组件”( Component )的概念展开的: enter image description here Component(组件)是整个框架的核心,也是终极目标。“组件化”的意义有2个:第一是分治,因...

weixin_34242331的博客 147

Angular组件概念

Angular 组件是构建 Angular 应用的基本单元,它们封装了应用的视图、数据和逻辑,并通过 Angular 提供的各种机制进行通信和交互。理解并熟练掌握 Angular 组件的概念和用法是成为一名高效 Angular 开发者的关键。

qq_68874993的博客 936
上一篇: Python爬虫 | 思维导图
下一篇: 基于.NET CORE框架Surging
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值