ng2试水
水文,写个小项目来熟悉下ng2啵,过程碰到什么记什么~
几个命令
通过angular-cli脚手架初始项目:ng new project-name(project-name是项目名)
启动项目:ng serve
创建组件:ng g component component-name (g是generator的缩写 生成)
angualr启动过程
angular-cli.json文件里,root->index的index.html是启动页面,root->main是启动脚本
ng2中的指令
class,*ngFor
|
|
class的选择,star为true的时候class中加上glyphicon-star-empty
*ngFor和ng-repeat一个作用
component(组件)
必备元素
- 装饰器@Component
- 模版Template
- 控制器Controller
@Input
组件内需要外界注入的属性,需要Input进来(不能直接Input,要先把这个服务import进来)
|
|
Router 路由
Routes:路由配置
1234const routes: Routes = [{ path: '', component: HomeComponent},{ path: 'product',component: ProductComponent}];定义路由,path对应相对应的组件
path里最前面不用加”/“,这是定义的跟路由,但在routerLink的时候是要加的
设置404不存在页面,path:’**’即可,就代表了404的路径
优先匹配原则,所以越广的越放在后面,比如404的
router-outlet:占位符指令
是个插座,路由到的组件显示在它的后面
RouterLink:html中声明路由导航的指令
1<a [routerLink]="['/product']">product</a>在a标签中加上这个属性,指向了这个路由地址。”/“是导航到跟路由
Router:负责在运行时执行路由的对象,可以用navigate等方法导航到指定路径
123gotoProPage(){this.router.navigate(['product']);}html中(click)事件绑定到这个方法,Router依赖注入进来定义为router,达到跳转
ActivatedRoute:
123456789constructor(public routerInfo:ActivatedRoute) { }ngOnInit() {//快照// this.productId = this.routerInfo.snapshot.params["id"];//订阅this.routerInfo.params.subscribe((params:Params)=>{this.productId = params["id"];});}快照的方式,在一个页面切换到另一个路由就不会改变productId,因为ngOnInit就执行一次;但订阅的等于在监听变量的变化,获得现在的值
重定向路由
|
|
在路由配置中这样配置达到重定向的效果
子路由
数据绑定
- 事件绑定,如(click)=”gotoDetail()”
- html属性绑定
- dom属性绑定
依赖注入
提供器的作用域
声明在app.module的provider中的提供器是全局可用的,什么组件内都可以注入这里的服务。
声明在组件的@Component中的provider只能在组件中使用,并且如果组件中声明的provider名字和全局中的一样时,会覆盖全局的(在这个组件里)
@Injectable装饰器
在provider中加上@Injectable才能在这个服务中注入别的服务,所以为了一致性,也为了不遗漏,每个provider创建的时候就加上@Injectable()
组件中没有这个装饰器也可以注入别的服务是因为有@Component装饰器,它是@Injectable装饰器的子类