Problem

  1. 使用依赖注入应该注意些什么
  2. 服务一般用来做什么
  3. 指令一般用来做什么
  4. angular2如何提取公共组件
  5. angular2为什么不需要提公共组件
  6. 父组件与子组件之间如何通讯
  7. 什么时候应该使用ngModel
  8. 为什么要用Typescript?我喜欢JavaScript
  9. 为什么如Input之类的语法后面必须加()

Solution

使用依赖注入应该注意些什么

首先我们要明白什么是依赖注入(Dependency Injection, DI),Java程序员应该不会陌生,DI是一种编程模式,它让一个类从外部资源中获取它的依赖,而不是自己亲自创建它。这样的好处是什么呢?好处就是我们不必去关心如何创建依赖这个过程,我们只需要舒服的使用这个已经创建好的实例就行。在angular2中使用DI一般是在组件中,注入的东西我们一般称之为service,使用@Injectable()进行标记。在使用DI时需注意在Component中的providers中声明该服务,然后在class中contructor中声明即可,eg:

@Component({
selector: 'source-list',
styles: require('xxx.scss'),
template: require('xxx.html'),
providers: [Regions]
})
export class SourceList {
constructor(private Region: Regions) {
}
}

此外,若组件的父组件providers中引入了一个service,在其子组件中可不用引入直接在contructor中声明即可;否则会报"not providers..."之类的错误

服务一般用来做什么

服务是什么呢?"Service" is a broad category encompassing any value, function or feature that our application needs. 它可以是值、函数或所需的特性等,一个典型的服务应该是具有专注、良好的定义的类。它应该做一件具体的事情,把它做好。我的理解,服务一般用来与后端通信即获取组件所需数据,或者管理组件特定属性的。

此外,服务的引入是单例的,也就是说你在一个组件中改变了这个服务对象的值,在另一个使用了该服务的组件也会跟随该服务的变化而变化。

指令一般用来做什么

指令一般用来操作DOM,通过在组件的directives中引入,这个引入就是新生成一个实例,他们之间互不影响,这点与服务相反。在我看来,指令大多时候都是按功能封装的一些组件,由父组件来统一使用。

还有另外两种指令,结构型指令与属性型指令。结构型 指令 会通过添加 / 删除 DOM 元素来更改 DOM 树布局。 NgFor 和 NgIf 就是两个最熟悉的例子。属性型指令改变一个元素的外观或行为。

angular2如何提取公共组件

angular2框架层面上就对样式进行了隔离,每个组件下属的样式对其他组件不会产生影响。

父组件与子组件之间如何通讯

父组件与子组件: 我一般通过input来实现,在子组件中用Input() 声明从父组件接收的变量,在父组件template使用子组件的地方传递改数据,eg:

父组件

@Component({
selector: 'source-list',
styles: require('xxx.scss'),
template: `
<header>
<nav-header></nav-header>
<nav-breadcrumb [paths]="paths"></nav-breadcrumb>
</header>
`,
providers: [Regions]
})
export class SourceList {
constructor(private Region: Regions) {
} path = '/source/list';
}

子组件

@Component({
selector: 'nav-breadcrumb',
template: require('./breadcrumb.html')
})
export class NavBreadcrumb {
constructor() {
} @Input() paths;
}

子组件与父组件: 我一般通过借助output和EventEmitter类来实现,通过在子组件中使用@Output()声明该类实例来获得和父组件通信的通道,支持触发事件并将相应数据返回,由父组件在template中使用处进行捕获。eg:

父组件

@Component({
selector: 'source-list',
styles: require('xxx.scss'),
template: `
<header>
<nav-header></nav-header>
<select-dialog (cancelDialogRequest)="cancelDialog()"></select-dialog>
</header>
`,
providers: [Regions]
})
export class SourceList {
constructor(private Region: Regions) {
} path = '/source/list';
cancelDialog() { }
}

子组件

@Component({
selector: 'nav-breadcrumb',
template: require('./breadcrumb.html')
})
export class NavBreadcrumb {
constructor() {
} @Output() cancelDialogRequest = new EventEmitter();
@Input() paths; cancelDialog() {
this.cancelDialogRequest.emit(1);
}
}

什么时候应该使用ngModel

ngModel用于数据双向绑定,一般形式为:

    <input [(ngModel)]="title">

它实际上是:

<input [value]="title"
(input)="title=$event.target.value" >

这又是是吗意思呢?我的理解是,[]表示值传递,也就是说这个值是其他地方定义的,这里就是引用了这个值,()表示事件监听,监听在此标签中该值得变化,并将此变化传递会来源的地方。因此,我们可以利用这一特性,将数据传递到子组件中,并在父组件里响应该数据的变化。比如,现在我们在父组件中有一个orders变量,我在父组件的模板中可以这样使用:

<delete-order-dialog [(orders)]="orders"></delete-order-dialog>

这样,我们在子组件里input该对象,通过一定操作,对orders进行的改变都能传递回父组件,并相应的展示在页面上。

为什么要用Typescript?我喜欢JavaScript

为什么要用typescript啊,我比较喜欢JavaScript这种弱类型的语言,想怎么用就怎么用,从来不需要考虑类型这些什么鬼。不管在什么领域都会有各种群体,就像目前的前端,就有React、Angular、Vue等,这些框架的使用者都很多,我们不能简单的去评判一个框架的优劣及难易程度,因为有些东西就是为特定的人群设计的,比如typescript,Java这种后端程序员使用起来就会顺手很多。嗯,秉持着多学点东西的开放心态,我开始使用spring、typescript了..

为什么如Input之类的语法后面必须加()

关于括号问题,官网其实已经多次提到了,Don't forget the parentheses! Neglecting them leads to an error that's difficult to diagnose. 没有()就会导致不可预料的错误!一定要写。为什么呢?这里我先做个假设,()在JavaScript里,一般都是执行某个函数,那么这里的input(),在我看就是执行了某个函数,标记了后面所跟着的变量,帮助程序运行定位的。

最后安利一波带我的老司机雪狼老大翻译的angular2中文官网

如想了解更多,请移步我的博客。

PS:我还是如风少年!

Angular2开发笔记的更多相关文章

  1. Angular2学习笔记——路由器模型(Router)

    Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...

  2. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出【转载自:酷小孩】

    原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...

  3. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  4. EasyUI 开发笔记(一)

    由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...

  5. angular2开发01

    // */ // ]]> angular2开发01 1. angular2 开发准备 1.1. 安装node 1.2. 安装npm 1.3. 运行qickStart 1 angular2 开发准 ...

  6. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  7. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  8. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

  9. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

随机推荐

  1. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  2. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  3. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  4. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  5. ExtJS 4.2 业务开发(二)数据展示和查询

    本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统 ...

  6. KV存储系统

    现在的KV存储系统都是分布式的,首先介绍Zookeeper——针对大型分布式系统的高可靠的协调系统. 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”.“部分失败”是指信息 ...

  7. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  8. JavaScript动画-磁性吸附

    ▓▓▓▓▓▓ 大致介绍 磁性吸附是以模拟拖拽为基础添加一个拖拽时范围的限定而来的一个效果,如果对模拟拖拽有疑问的同学请移步模拟拖拽. 源代码.效果:点这里 ▓▓▓▓▓▓ 范围限定(可视区) 先来看一个 ...

  9. 漫谈C#编程语言在游戏领域的应用

    0x00 前言 随着微软越来越开放,C#也变得越来越吸引人们的眼球.而在游戏行业中,C#也开始慢慢地获得了关注.这不, 网易绝代双娇手游团队已经全面使用.Net Core支持前后端统一C#开发,跨平台 ...

  10. 从零自学Hadoop(22):HBase协处理器

    阅读目录 序 介绍 Observer操作 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sour ...