0%

3.Angular中的服务

1. 服务Service

Angular中组件和组件之间是不能相互调用以及通讯的,因此,一般的公共方法都写到服务(Service)中.
服务之间是可以相互调用的

1
2
3
4
5
6
7
8
9
10
11
1.创建服务(Service)
ng g service 目录/服务名称
通过此命令创建的组件,会在app.module.ts中import引入此服务,并且在@NgModule的providers中添加

2.使用服务
需要在组件中先import引入此服务,在通过构造方法,将服务赋给组件,e.g:
export class MyComponent Implements OnInit {
constructor(public storageService:StorageService){
...
}
}

2.Angular基础指令

1. 基础指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1. 数据绑定: 使用双大括号 {{xxx}},例 {{name}}
2. 属性绑定: 使用[属性名]="xxx",例 <span [title]="xxx"></span>
3. html绑定: [innerHTML]="xxx"
4. 数据循环
<li *ngFor="let item of xxx; let key=index">
{{key}} --- {{item}}
</li>
5. 条件判断:
*ngIf="条件表达式"

[ngSwitch]="xxx",e.g:
<span [ngSwitch]="xxx">
<p *ngSwitchCase="1">结果1</p>
<p *ngSwitchCase="2">结果2</p>
<p *ngSwitchDefault>默认值</p>
</span>
6. 动态改变class:
//flag为后台动态值
<div [ngClass]="{'red':flag,'blue':!flag}"></div>
7. 动态改变style:
//xxx为后台动态值
<div [ngStyle]="{'color':xxx}"></div>
8. 管道
//例时间格式化管道
{{date | date:'yyyy-MM-dd HH:mm:ss'}}

9. 事件
//$event为事件对象,$event.target为当前dom对象
<button (click)="xxx($event)">点击事件<button>

angular模板中允许简单的运算.e.g: 3
其他管道请参考链接

2. 双向数据绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. 双向数据绑定,一般只用于表单,在Angular中使用,需要先引入表单模块
import { FormsModule } from '@angular/forms';
@NgModule({
...
imports: [
BrowserModule,
FormsModule
],
...
}]

2. 双向数据绑定,使用[(ngModel)]='xxx'
<input type="text" [(ngModel)]="keywords"/>
<p>{{keywords}}</p>

1.Angular基础

1. Angular环境搭建

1. 安装node.js
2. 安装cnpm  
    npm install -g cnpm --registry=https://registry.npm.taobao.org
3. 安装Angular脚手架
   npm install -g @angular/cli     或者    cnpm install -g @angular/cli

2. Angular创建项目

1. 使用 ng new 项目名称,来创建Angular
    ng new angulardemo
 跳过npmi安装,请使用
    ng new angulardemo --skip-install

2. 运行项目
    ng serve --open

3. Angular项目目录文件介绍

阅读全文 »

记录下新环境的配置

生成类/接口注释

设置位置: Setting-Editor-File and Code Templates-Class|Interface

1
2
3
4
5
6
7
8
/**
*
* ${description}
*
* @author caleb_liu@enable-ets.com
*
* @create ${DATE}
**/

添加类/接口注释模板

设置位置: Setting-Editor-Live Templates, 在 Java 中添加一个模板或新建一个模板组, 注意不要开头不要写 /, 会使 idea 内置方法失效, 使用方法: 在类或方法上使用 / + 触发关键字

阅读全文 »

使用 Groovy 脚本生成对应的PO, 非 Mybatis逆向工程生成,

来自: IDEA – 自动生成POJO

Groovy脚本记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

import java.text.DateFormat
import java.text.SimpleDateFormat

/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
packageName = "com.xxx.po;" //这里要换成自己项目 实体的包路径
typeMapping = [
(~/(?i)int/) : "Integer", //数据库类型和Jave类型映射关系
(~/(?i)float|double|decimal|real/): "Double",
(~/(?i)bool|boolean/) : "Boolean",
(~/(?i)datetime|timestamp/) : "java.util.Date",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)/) : "String"
]

FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
}

def generate(table, dir) {
def className = javaName(table.getName(), true) + "PO"
def fields = calcFields(table)
new File(dir, className + ".java").withPrintWriter("utf-8") { out -> generate(out, table, className, fields) }
}

def generate(out, table, className, fields) {
def tableName = table.getName()
out.println "package $packageName"
out.println ""
out.println "import lombok.*;"
out.println ""
out.println "import javax.persistence.*;"
out.println ""
out.println "/**"
out.println " * @author xxx"
out.println " **/"
out.println "@Data"
out.println "@Entity"
out.println "@Table(name = \"$tableName\")"
out.println "public class $className {"
out.println ""
// 这里如果需要生成id字段需要打开
if ((tableName + "_id").equalsIgnoreCase(fields[0].colum) || "id".equalsIgnoreCase(fields[0].colum)) {
out.println " @Id"
out.println " @GeneratedValue(strategy=GenerationType.IDENTITY)"
}
fields.each() {
if (it.comment != "" && it.comment != null) {
out.println " /**"
out.println " * ${it.comment}"
out.println " **/"
}
if (it.annos != "") out.println " ${it.annos}"
if (it.colum != it.name) {
out.println " @Column(name = \"${it.colum}\")"
}

out.println " private ${it.type} ${it.name};"
out.println ""
}
out.println "}"
}

def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
colum : col.getName(),
type : typeStr,
comment: col.getComment(),
annos : ""]]
}
}

def javaName(str, capitalize) {
def s = str.split(/(?<=[^\p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
.join("").replaceAll(/[^\p{javaJavaIdentifierPart}]/, "_").replaceAll(/_/, "")
capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

ES最新版已经到 7.x 了, 想用最新版啊, 多了很多特性.但是这个环境是做业务测试的, 原来用的就是 2.4.6 , 防止出问题, 延续了.

下载安装

进入工作目录, 执行即可:

1
2
3
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.6/elasticsearch-2.4.6.tar.gz
tar -zxvf elasticsearch-2.4.6.tar.gz
cd elasticsearch-2.4.6/

基础配置

编辑 vim config/elasticsearch.yml 文件, 放开以下配置的注释并修改.

阅读全文 »

最近有个数据迁移需求, 量比较大, 搞个新环境测试下~

以下内容参考至官方文档: https://github.com/MyCATApache/Mycat-Server/wiki

下载 Mycat

官网下载后解压即可.

目录说明

1
2
3
4
--bin		启动目录
--conf 配置文件存放配置文件
--lib MyCAT自身的jar包或依赖的jar包的存放目录。
--logs MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件

运行

阅读全文 »

记录一下平时用到的命令

导入 sql :

1
source /var/xxx.sql

CentOS 7 开启关闭Mysql

1
2
systemctl mysqld start
systemctl mysqld stop

next 主题相当有名, 不过默认配置看起来略微单调. 搜索了一下, 觉得这篇 使用 Github 空间搭建 Hexo 技术博客——使用NexT优化博客 相当不错, 记录一下.

可能是版本不同, 还是略微有点差异的.

主题配置

next 配置为 theme/next/_config.yaml 文件, 直接用vim或其他编辑器修改, 保存即可生效, 不用重启 hexo

开启需要的导航栏

next 配置中找到 menu 看看自己博客所需的导航栏, 需要开启的将头部 # 号删除即可.

阅读全文 »