您的位置:首页 > Web前端 > JavaScript

angular js(2)和ionic(2)的总结

2017-03-06 12:48 85 查看
最近一段时间又学习了一遍angular 2 和 ionic 2 主要和1的差别个人认为主要在于typescript这种语法的差异,typescript是一种OOP编程语言,是js的超集,

他将js面向对象编程弱的特点给完全放大出来而解决 所以我们看到angular 中一个界面就是一个类 component 在这个类中的数据绑定 按钮点击事件等都是

在这个类中实现的

首先看一下这个项目的目录结构



在src下使我们主要工作的目录

app.module.ts是真个项目的入口文件 

import { BrowserModule } from '@angular/platform-browser';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import { AppComponent } from './app.component';
import {UserComponent} from './component/user.component'
import {AboutComponent} from './component/about.component'
import {HttpModule,JsonpModule} from '@angular/http';
import {routing} from './app.routing';
import {HttpService} from './service/HttpService'
@NgModule({
imports: [ BrowserModule,FormsModule,CommonModule,HttpModule,routing,JsonpModule],
declarations: [ AppComponent,UserComponent,AboutComponent],
//根视图的 只有根视图才能被视为boostrap
bootstrap: [ AppComponent ],
providers:[HttpService]
})
export class AppModule { }
在@NgModule中 import表示引入其他的一些第三方框架 这里有HttpModule JSONModule等
declararions 表示 我们需要用到的界面 这里有AppComponet,UserComponent等这些界面 \

boostrap表示根界面 只能有唯一的一个 这里便是用AppComponent

providers 表示用到的服务 这里HttpService表示可以用到全局服务当中去

再来要看看一个个单个的界面

以user为例



在user.component.ts中 定义了一个界面应有的一些行为等

import { Component,Input,
trigger,
state,
style,
transition,
animate} from '@angular/core';
import {HttpService} from './../service/HttpService'
import {Router} from "@angular/router";和上面根界面一样 表示引入第三方的一些框架 
随后是页面的声明,

@Component({
//为与模块相关的url
moduleId:module.id,
selector: 'user',
//providers表示服务的创建者
templateUrl:'user.component.html',
styles: [`
.hero {
background-color: #CFD8DC !important;
color: white;
}
`]

})moduleId 表示与模块相关的url 
随后selector 表示可以在其他界面引用该界面的hrml标签 这里用到了user

providers 表示相关用到的协议,templateURL 表示html页面 同时也可以用template来直接写html标签

这里还可以使用styles 来声明相关属性

export class UserComponent {
name = 'Angular';
address: address;

divHtml = "<p>caokaiqqq</p>";
inputtext:any
hobb:string[]
constructor(private HttpService:HttpService,private router:Router) {
this.address = {
street:"cangqian",
state:"hangzhou"
}

export表示将这个方法暴露出去 可供外部的其他界面引用该界面等
constructor表示构造器,在一个类中可声明相关的属性 例如name address等

私有的httpService协议等

整体的代码如下

import { Component,Input,
trigger,
state,
style,
transition,
animate} from '@angular/core';
import {HttpService} from './../service/HttpService'
import {Router} from "@angular/router";

@Component({
//为与模块相关的url
moduleId:module.id,
selector: 'user',
//providers表示服务的创建者
templateUrl:'user.component.html',
styles: [`
.hero {
background-color: #CFD8DC !important;
color: white;
}
`]

})
export class UserComponent {
name = 'Angular';
address: address;

divHtml = "<p>caokaiqqq</p>";
inputtext:any
hobb:string[]
constructor(private HttpService:HttpService,private router:Router) {
this.address = {
street:"cangqian",
state:"hangzhou"
}
this.hobb = ["mo","read"];
this.HttpService.getPost().then(
post => {
alert("成功");
console.log(post);
}
).catch(error => {
alert(error);
})
//编码成base64
var dic = {
name:"cao",
age:12
}
var base64 = btoa(JSON.stringify(dic));

console.log(atob(base64));
//解码成base64
}
addHobby(hobby:string){
alert(hobby);
this.router.navigate(['/about',{}]);

}
alert(){

}
}
//定义接口
export interface address {
street:string,
state:string
}



路由的使用
在app下创建一个app.routing.ts 

import {ModuleWithProviders} from '@angular/core';
import {Routes,RouterModule} from '@angular/router';
import {AboutComponent} from './component/about.component';
import {UserComponent} from './component/user.component';
import {AppModule} from "./app.module";第一步还是引入相关的框架
随后是路由appRoutes的定义

const appRoutes:Routes = [
{
path:'',
component:UserComponent
},
{
path:'about',
component:AboutComponent
}
];path表示相关的路由 component表示使用相关的界面
随后将这个appRoutes定义的export出去即可 全部的代码如下

/**
* Created by hcnucai on 2017/3/2.
*/
import {ModuleWithProviders} from '@angular/core';
import {Routes,RouterModule} from '@angular/router';
import {AboutComponent} from './component/about.component';
import {UserComponent} from './component/user.component';
import {AppModule} from "./app.module";
const appRoutes:Routes = [
{
path:'',
component:UserComponent
},
{
path:'about',
component:AboutComponent
}
];
export const routing:ModuleWithProviders =RouterModule.forRoot(appRoutes);在Index.html中的使用 首先是最起码的url /
<body>
<base href="/">
<my-app>Loading AppComponent content here ...</my-app>
</body>随后可以在一般的html中 可以用router-link来进行跳转
import { Component } from '@angular/core';

@Component({
moduleId:module.id,
selector: 'my-app',
template:'<ul><li><a routerLink = "/">home</a> </li>' +
'<li><a routerLink="/about">about</a> </li></ul>' +
'<router-outlet></router-outlet>'
})
export class AppComponent {
}

这样就可以在路由中进行跳转
在代码中也可以进行跳转

this.router.navigate(['/about',{}]);后面表示相关引用的参数 这样即可
关于httpService的学习

import {Injectable} from '@angular/core';
import {Http,JsonpModule} from '@angular/http';
import 'rxjs/add/operator/toPromise';通过promise来进行返回
//记下本服务的元数据
@Injectable()
export class HttpService {
constructor(private http:Http) {
console.log("Post Service init");
}
//发起请求的方法
getPost():Promise<any[]> {
var param = {
authtoken: "0B849459E30161BE5A5E302F257022FA1FCF5D09E7BD2A2D",
count: 100,
page: 1
}
return this.http.post("http://dodo.hznu.edu.cn/apiteach/courselist",param,{})
.toPromise()
.then( response => {

let res = response.json();

if(res.retcode != 0){
return Promise.reject(res.message);
}else
return Promise.resolve(JSON.stringify(response.json().items));
})
.catch(error => {
return Promise.reject(error);
});
}

}

传进参数即可
返回promise 这个参数 @injectable来表示引用相关的元数据

以上就是对angular2的相关总结

ionic 也是和angular2差不多

在app.module.ts中

imports: [
IonicModule.forRoot(MyApp,{
menuType: 'push',
platforms: {
ios: {
menuType: 'overlay',
}
},
})
],表示用MyApp中来进行引用
其他大致如此 可以在theme的variables.scss中改变相关的默认属性

例如$color等属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: