最近项目要用的

一些无关紧要的文件夹, demo是一些示例, dist是webpack打包后发布的代码,server是用node启动服务,typings和tsconfig是一些ts配置.

npm install 安装node_modules依赖.

npm start 从package.json指定的webpack.config开始运行.

    "start": "concurrently \"webpack --watch --colors\" \"nodemon server/main.js\""
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = {
entry: {
main:['./app/main.ts'],
vendor:[ ]
},
externals:{
"jquery":"jQuery"
},
output: {
path: './dist',
filename: 'js/app.bundle.js',
publicPath:'/'
},
module: {
loaders: [
{test: /\.ts$/, loader: 'ts'},
{test: /\.html$/, loader: 'raw'},
{test: /\.css$/, loader: 'raw'}
]
},
resolve: {
extensions: ['', '.js', '.ts', '.html', '.css']
},
plugins: [
new HtmlWebpackPlugin({
template: './app/index.html'
}),
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
//filename : 'vendor_[chunkhash].js',
filename : 'js/vendor.js',
minChunks: Infinity
}),
/*new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),*/
new webpack.DefinePlugin({
app: {
environment: JSON.stringify(process.env.APP_ENVIRONMENT || 'development')
}
})
] };

webpack.config

webpack设入口为main.ts

import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule);

main.ts导入./app.module.ts(import和require的时候后缀名可以省略)使用bootstrapModule方法启动AppModule

在模块app.module.ts中导入angular基础模块以及自定义组件和路由组件.

import './polyfills';

import {BrowserModule} from "@angular/platform-browser";
import {NgModule} from "@angular/core";
import {HttpModule} from '@angular/http'; // 表单 双向数据绑定
import {AppComponent} from "./app.component";
import { HomeComponent, TestComponent } from './component';
//路由
import APP_ROUTER_PROVIDERS from "./app.routes"; import {enableProdMode} from '@angular/core';
import { LoggerService, GLobalService, UIHelperService } from './service';
enableProdMode(); @NgModule({
imports: [
BrowserModule,
HttpModule,
APP_ROUTER_PROVIDERS
],
declarations: [
AppComponent,
HomeComponent,
TestComponent
],
providers: [
LoggerService,
GLobalService,
UIHelperService
],
bootstrap: [AppComponent]
}) export class AppModule {
}

app.module.ts

自定义组件如果是以页面为划分,比如HomeComponent, TestComponent, 可以在内部再细分功能组件.

例如上面的

import { HomeComponent, TestComponent } from './component';

AppModule中导入页面组件后,在app.routes.ts中作好路由,就可以在html模板中实现页面跳转.

import {RouterModule, Routes } from '@angular/router';

import { HomeComponent, TestComponent } from './component';

const routes = [
{path: '', component: HomeComponent},
{path: 'test', component: TestComponent}
]; export default RouterModule.forRoot(routes);

component.ts中

export * from './app.component'

export * from './components/home/home.component'
export * from './components/test/test.component'

统一export组件, Module中统一import或require, 这是这个工程组织的结构.

AppModule最后也是export一个对象供使用.

上面提到的home组件除了home.component.ts还有一个模板文件homecomponent.html.ts

import {Component,OnInit} from "@angular/core";
import { URLSearchParams } from '@angular/http';
import { GLobalService, UIHelperService } from '../../service'; import { htmlTemplate } from './home.component.html'; @Component({
selector: 'home',
template: htmlTemplate
})
export class HomeComponent implements OnInit{
errorMessage:string;
homeData:any; constructor(private _globalService: GLobalService,private _uIHelperService:UIHelperService) {} ngOnInit() {
let requestParams = new URLSearchParams();
requestParams.set('id', '');
this._globalService.ajaxCallerGet(this._globalService.getServiceURL('home'), requestParams).subscribe(
(data) => {
this.homeData=data;
//this._uIHelperService.getTest("test");
console.log(data,this.homeData);
},
error => this.errorMessage = <any>error
);
}
}

hoem.component.ts

其中导入了封装有ajax方法的的service组件, 指定模板文件位置 import { htmlTemplate } from './home.component.html';

export const htmlTemplate = `
<div class="row">{{homeData?.name}}</div>
<a [routerLink]="['/test']">切换到测试页面</a>
`;

中间的a标签插入了路由标志'test', div中的{{插值变量}}语法根据不同的依赖包会有所不同,此处有一个问号?

路由去到test

import {Component} from "@angular/core";
import { htmlTemplate } from './test.component.html';
@Component({
selector: 'test',
styles: [''],
template: htmlTemplate
})
export class TestComponent{
constructor() {
//this.name = 'World';
}
}

读取模板

export const htmlTemplate = `
<div class="row">
我是test
</div>
`;

前台的逻辑基本就是这样,更多有关node的知识以及隐蔽工程有待完善.

形形色色Node工程Angular2的更多相关文章

  1. 新建node工程

    之前各种node工程都是东抄抄,西抄抄的.  用ng的cli之后,发现非常舒服.所以把node新建工程的种种记录一下. node+babel, 直接按es6标准写就好了,  不需要一定写ts再转码了( ...

  2. 使用pm2-zabbix监控node工程

    环境 centos 7 zabbix 3.2.6 node 4.4.3 安装 # wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix ...

  3. 云主机CentOS 7新环境命令行搭建node工程步骤

    1.用Node官网提供的命令安装node https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-d ...

  4. node.js + webstorm :配置开发环境

    一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...

  5. node(thrift)

    thrift是一种跨语言的RPC框架,据说uber采在node.js项目中采用thrfit后,比原有的http+json的方式提高近20倍的性能. 所谓的RPC本质上就是客户端将需要调用的方法名和参数 ...

  6. C蛮的全栈之路-node篇(一) 环境布置

    目录 C蛮的全栈之路-序章 技术栈选择与全栈工程师C蛮的全栈之路-node篇(一) 环境布置C蛮的全栈之路-node篇(二) 实战一:自动发博客 ---------------- 我是分割线 ---- ...

  7. node中创建服务进程

    背景 在node工程部署中,常常涉及到三方:本地客户端.跳板机和服务器(集群).在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这 ...

  8. Node.js C/C++ 插件

    插件 Addons 是动态链接的共享对象.他提供了 C/C++ 类库能力.这些API比较复杂,他包以下几个类库: V8 JavaScript, C++ 类库.用来和 JavaScript 交互,比如创 ...

  9. Node.js小白开路(一)-- 全局变量篇

    全局内容是有点类似于我们在浏览器编程的时候的window对象的,当时在node之中虽然我们编写的变量会自动的给出上下文环境(模块),但是全局变量的存在还是大大的帮助了我们编程时候的便捷性.我们可以在任 ...

随机推荐

  1. Android_ImageView

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  2. win8 64位操作系统 Microsoft Visual Studio 2010在IIS上调试 “此任务要求应用程序具有提升的权限”等问题

    很少在IIS上调试程序,因系统原因,所以不得不在IIS上预览项目和调试项目(因为只能在IIS上预览项目才能看到项目里的数据). 1.附加到进程(注意附加到进程前必须预览项目) 2.选择调试项 需要注意 ...

  3. 鼠标移动到表格的TD上的时候显示成一个手型的样子怎么做?

    在除了IE6的情况下,可以通过CSS的:hover伪类来实现: 假如你想设定的固定区域为: <div id="test"></div>,那么只需要在CSS样 ...

  4. JS操作CSS样式

    一.样式表(css) 使用样式表可以更好的显示WEB文档,也可以结合javascript从而实现很好的控制样式表. 样式(css)与内容(html): HTML是处理文档结构的,HTML可以实现如何把 ...

  5. Unity3D用vistual studio打卡C#脚本卡死解决

    小黑已经跟我3年了,不仅很喜欢他方正酷黑的外表,而且稳定性绝对没的说.我已经3年没有重装过系统了,而且现在装了3个系统!虽然小黑很适合程序员,但是他最大的缺点就是做设计比较吃力,显卡512M.像uni ...

  6. 20151221jquery学习笔记--验证插件

    验证插件(validate.js),是一款验证常规表单数据合法性的插件.使用它,极大的解放了在表单上繁杂的验证过程,并且错误提示显示的完善也增加了用户体验.一. 使用 validate.js 插件官网 ...

  7. oracle 11g卸载方法

    在网上查看了很多卸载oracle11g的方法,但是感觉都太复杂了,没有使用,最后查看了很多资料,得到一种比较简单,而且能完全卸载的方法: 在根目录下运行c:\app\Administrator\pro ...

  8. 100个iOS开发面试题汇总-王刚韧的技术博客

    100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...

  9. C# Unix时间戳转换为时间

    在做一些接口的时候,比如返回数据中有一个时间的属性,它的值是使用Unix时间戳表示的,当我们处理它(保存到本地或者格式化前台展示)时需要转换成日期时间,在此就需要根据时间戳转换为日期时间 (注:Uni ...

  10. 08_使用TCP/IP Monitor监视SOAP协议

    [SOAP定义] SOAP   简单对象访问协议,基于http传输xml数据,soap协议体是xml格式.SOAP   是一种网络通信协议SOAP   即Simple Object Access Pr ...