一、父组件怎么覆盖子组件的样式呢

1./deep/(不建议这么做,以后angular会取消,因为这样写不利于组件的独立性)

在父组件的scss里面写:

:host{
子组件名 /deep/ label{
color:red
}
}

这样就可以覆盖掉子组件label的color了

2.host和host-context

在子组件的scss里面写:

:host(.自身加的class){
label{
color:red;
}
}

或者

:host-context(父组件名){
label{
color:red;
}
}

网上查到的定义:

  • :host(selector) { ... } for selector to match attributes, classes, ... on the host element
  • :host-context(selector) { ... } for selector to match elements, classes, ...on parent

二、Unit Test for Service

有两个方法,但是其实都是大同小异,都需要inject来生成实例,和mockBackend来模拟http返回data

方法一:注入要测试的service和MockBackend,并得到其实例

import { MockBackend } from '@angular/http/testing';
import { TestBed, inject } from '@angular/core/testing';
import { TestService } from './test.service';
import { Response, ResponseOptions } from '@angular/http'; describe("test.service", () => {
let testService:any;
let backend:any;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [TestService, MockBackend]
});
})
//inject注入要测试的service和mockbackend(模拟http返回数据),后面注入function拿到对应实例
beforeEach(inject([TestService, MockBackend], (testService, mockBackend) => {
this.testService = testService;
this.backend = mockBackend;
}))
it('test a service', () => {
let MOCKDATA = {
//一些模拟数据...
}
this.backend.connections.subscribe((connection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(MOCKDATA)
})));
});
this.testService.getData('一些api需要的数据').subscribe((res) => {
expect(res.length).toEqual(10);
});
})
})

方法二:自己重写一个http,mockData传到自己重写的http上,前提是service调用了自己重写的http方法

describe("test.service", () => {
let testService:any;
beforeEach(() => {
let mockData = new ResponseOptions({
body: JSON.stringify({
//MockData
})
});
let cshttpServiceStub: any = {
get: function () {
return Observable.create(observer => {
observer.next((new Response(mockData)));
observer.complete();
})
}
}
TestBed.configureTestingModule({
providers: [
TestService,
{ provide: CshttpService, useValue: cshttpServiceStub }
]
});
})
//还是需要inject,才能在不调用component请款下创建service实例
beforeEach(inject([TestService], (testService) => {
this.testService = testService;
})) it('test a service', () => {
this.testService.getData('一些api需要的数据').subscribe((res) => {
expect(res.length).toEqual(10);
});
})
})

三、面对没有值的html属性,怎么办?

例如input的disabled,video和audio的autoplay、loop,ol的reversed.....

这些属性都是只要存在于标签上就会有所影响:

例如:

<video autoplay src="1.mp4"></video>
<video autoplay="false" src="1.mp4"></video>

无论给autoplay什么值都好,甚至给它false都好,这个video还是会自动播放,这个时候Angular提供了比较方便的方法去实现动态判断是否留下这样属性的方法

大致有2个方法:

方法1:中括号输入法

<video [autoplay]="false" src="1.mp4"></video>

把autoplay用中括号包住,如果是false,Angular就会自动把它去除掉,编译出来就变成

<video src="1.mp4"></video>

方法2:中括号attr输入法

<video [attr.autoplay]="true" src="1.mp4"></video>
<video [attr.autoplay]="null" src="1.mp4"></video>

attr.属性和中括号输入法差不多,不同的是false的时候不能输入false,因为attr.属性会把输入的值原封不动地输入去,编译成下面这样:

<video autoplay="false" src="1.mp4"></video>

而输入null则可以实现和括号输入法输入false时一样的效果。

四、常用的Angular内置的指令

指令  例子
ngIf  *ngIf="true"
ngFor  *ngFor="let btn of btns"
ngClass  [ngClass]="{'info':true}"
ngModel  [(ngModel)] = "person.name"
ngModelChange
 (ngModelChange)="onChange($event)"
ngSubmit  (ngSubmit) = "onSubmit($event)"
在Angular里面HTML时间都是以小括号括住实现的,例如(click)="onClick($event)",注意这里$event是不能乱改的,Angular会自动识别并且注入对应的东西
在这里就会有一个疑问,就是(change)="change($event)"和(ngModelChange)="change($event)"的区别是什么呢?
 
(change)="change($event)" 是每次input完失去焦点才会触发,$event传回来的是一个对象:(target和srcElement就是触发事件的对象)
 
(ngModelChange)="change($event)",就是每输入一个字符就会触发一次,$event返回的是这个元素绑定的ngModel
 
(ngSubmit)="onSubmit($event)"只会在提交表单时候触发,$event传回来的是一个对象和(change)返回的差不多的对象

Angular开发小笔记的更多相关文章

  1. Angular 开发小妙招1:提交表单数据验证不通过,更改输入组件的样式

    开发表单时,客户端数据完整性校验是必不可少的,在jquery 时代出现了无数的数据验证插件也很好用,开发Angular 应用时,angular 内置了一些常用的数据验证指令.今天要讲的不是这些指令如何 ...

  2. PIE 插件式开发小笔记__PIESDK学习体会

    基于PIE.NET-SDK插件式二次开发文档笔记:  PIE 插件式开发配置文件: 它里面一行如下:      理解上一行'Item'关系->    library:为插件类名(程序集名称+后缀 ...

  3. WEEX-EROS开发小笔记

    本文是作者之前刚接触移动端跨平台开发,使用weex-eros开发项目平日里记下来的一些笔记,分享出来方便为新手解惑,weex-eros是weex的一套解决方法,使用vue语法糖,对于前端开发者来说可以 ...

  4. android studio开发小笔记1

    1.点击空白处隐藏软键盘 /* 隐藏软键盘 * */ public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == ...

  5. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  6. 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9430645 作者:七十一雾央 新浪微博:http:/ ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  9. 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9394465 作者:七十一雾央 新浪微博:http:// ...

随机推荐

  1. Linux内核分析第六周总结

    进程控制块PCB--task_struct 操作系统的内核里的三大功能: 进程管理 内存管理 文件系统 进程描述符--task_struct 进程管理是最核心的内容 然而Linux进程的状态与操作系统 ...

  2. SVN解决冲突

    SVN冲突出现场景 如今是一个团结协作的时代,开发一个系统,往往会多人协作共同完成.版本管理是必不可少的,常用的软件有Git,SVN等.今天说一下,SVN管理版本时,如果出现冲突后,如何快速解决冲突. ...

  3. HDOJ2007_平方和与立方和

    应该注意到一个细节是题目中没有说明输入的两个数据一定是先小后大的关系,所以需要做一次判断.其他的比较简单. HDOJ2007_平方和与立方和 #include<iostream> #inc ...

  4. Windows 通过命令行设置固定ip地址

    Winserver1709 之后 windows系统取消了GUI界面 设置ip地址 需要使用命令行界面进行 这里简单记录一下 打开win1709的虚拟机 进入命令行控制台 输入 ipconfig 查看 ...

  5. App Store转让App

    转让前提条件:①App在App Store能找到     ②该App没有正在审核中的版本 iOS在App Store转让App的详细步骤, 每一步都有图,照图一步一步来就OK 1.获得接收App的苹果 ...

  6. pandas缺失值处理

    1.检查缺失值 为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法 - 示例1 im ...

  7. SP5973 SELTEAM - Selecting Teams

    SP5973 SELTEAM - Selecting Teams [题目描述] 他已经有 n 个心仪的妹子了,但随着时间的流逝,只有 m(1<=m<=k)个直伴随在他的身边,而小小迪发现他 ...

  8. 牛客网练习赛7-D-无向图(bfs,链式前向星)

    题意:中文题: 思路:就是找某个点距离其他点的距离,他给你很多点也无所谓.用一个dist[]数组,这个数组保存的是他给你的点到其他点的最短距离且标记的作用,然后bfs搜索就行了. 代码: #inclu ...

  9. MT【15】证明无理数(1)

    证明:$tan3^0$是无理数. 分析:证明无理数的题目一般用反证法,最经典的就是$\sqrt{2}$是无理数的证明. 这里假设$tan3^0$是有理数,利用二倍角公式容易得到$tan6^0,tan1 ...

  10. 胡小兔的 PKUSC2018 游记

    Day 0 一番纠结之后,我还是选择了 PKUSC (Penguin Kingdom University Summer Camp, 企鹅王国大学夏令营)! 理由?扔硬币决定的理由如下: PKU好啊 ...