angular 4.0注意事项 - Zikzin/Angular.js-study GitHub Wiki
- "style":["../node_modules/bootstrap/dist/css/bootstrap.css],
- "scripts":[../node_modules/bootstrap/dist/js/bootstrap.js , ../node_modules/jquery/dist/jquery.js]
- npm install @types/jquery --save-dev
- npm install @types/bootstrap --save-dev
- ng g component navbar
- 该命令会生成四个文件:html、css、ts、spec.ts(用于测试),并且更新app.module.ts(在declarations可以看到新生成的组件)
- 样式绑定:[class.empty]="star" (star是布尔值,为true时,生效)
- 如何将父组件中的数据通过输入属性传递给子组件。
- ng new router --routing
-
在查询参数中传递数据
-
在路由路径中传递数据
- 第一步:修改路由配置中的path属性使其可以携带参数
- 第二步: 修改路由链接的参数来传递数据
- 第三步:
-
在路由配置中传递数据
- 在用户访问一个特定的地址时,将其重定向到另一个指定的地址。
- www.aaa.com -> www.aaa.com/products
- wwww.aaa.com/x -> www.aaa.com/y
-
{path:'home',component:HomeComponent}
-
{path:'home',component:HomeComponent,
children:[
{
path:'',component:XxxComponent,
},
{
path:'/yyy',component:YyyComponent
}
]
}
{path: 'xxx',component: XxxComponent,outlet:'aux'}
{path: 'yyy',component: YyyComponent,outlet:'aux'}
<a [routerLink] = "[ '/home' , {outlets:{aux: 'xxx'}}]"> Xxx
<a [routerLink] = "[ '/product' , {outlets:{aux: 'yyy'}}]"> Yyy
-
使用场景:
- 只有当用户已经登录并拥有某些权限时才能进入某些路由。
- 一个由多个表单组件组成的向导,例如注册流程,用户只有在当前路由的组件中填写了满足要求的信息才可以导航到下一个路由。
- 当用户未执行保存操作而试图离开当前导航时提醒用户。
-
路由守卫类型:
-
CanActive: 处理导航到某路由的情况。
-
CanDeactivate: 处理从当前路由离开的情况。
-
Resolve: 在路由激活之前获取路由数据。(在进到组件之前,先拿到组件需要的数据,如果拿不到想要的数据,或者数据出错,就跳到比如提示页,就不再进入目标路由。)
- ng4中默认的是单向数据绑定,所谓单向指 a、将组件控制器属性的变化反映到模板上,例如1和2。 b、将模板上的事件绑定到组件控制器的方法上。如3。
- 插值表达式 = 属性绑定
-
<img [src] = "imgUrl">
-
html属性与dom属性的区别:
-
`<input value="Tom" (input)="doOnTnput($event)">
doOnTnput(event:any){
console.log(event); // 拿到这个事件的所有属性 console.log(event.target.value); // dom属性,根据输入框输入内容而改变,指定当前值 console.log(event.target.getAttribute('value')); // 得到html属性,保持不变的,这里就是Tom,指定初始值
}`
-
<button disable>点击</button>
- 添加或删除disable的html属性会禁用或启用按钮,但这个html属性的值是无关紧要的,如disable="false"不禁用按钮,都没有用,但是可以通过设置dom属性的disable的值设置。这就是dom属性的价值。
-
- <button (click) = "toDetail()">商品详情
- <button (click) = "save = true">
- (1)少量html属性和 dom属性之间有着1:1的映射,如id。
- (2)有些html属性没有对应的dom属性,如colspan。
- (3)有些dom属性没有对应的html属性,如textContent。
- (4)就算名字相同,html 属性和dom 属性也不是同一样东西。
- (5)html 属性的值指定了初始值,dom属性的值表示当前值,dom属性的值可以改变,html属性的值不能改变。
- (6)模板绑定是通过dom属性和事件来工作的,而不是html属性。
-
基本属性绑定
<td [attr.colspan]="tableColspan">somthing</td>
-
css类绑定
<div class="aa bb" [class]="someExpression"></div>
<div [class.special]="isSpecial"></div>
<div [ngClass]="{aa:isA,bb:isB}"></div>
-
样式绑定
<div [style.color]="isSpecial?'red':'blue'"></div>
<div [ngStyle]="{'font-style':this.canSave?'italic':'normal'}"></div>
-
常见用于表单处理,用在特殊的表单元素上,用在div span等没用处的。
-
<input [value]="name" (input)="doOnInput($event)">{{name}} // 既要绑定属性,也要绑定事件
-
<input [(ngModel)]="name"> // 用ngModel来绑定
-
常用内置管道:
- uppercase、lowercase、
- date:'yyyy-MM-dd HH:mm:ss'、
- number:'2.1-4'(2,表示小数点前有几位,1表示最小的小数位,4表示最多小数保持几位)
- async 处理页面上异步的流
-
自定义管道:ng g pipe pipe/multiple
- 上面的指令会自动在模块的declarations里(跟组件一样)
- @pipe({ })
-
如:将原始值到输出值的改变
<p>我的生日是{{birthday | date | uppercase}}</p>