Angular4.x学习日志
码云链接:https://gitee.com/ccsoftlucifer/Angular4Study
1.部署环境
安装nodejs
安装angular脚手架程序
2.创建工程
ng new 项目名称 // 创建一个项目
add routing
yes
css
yes
npm install //安装依赖
ng serve --open //启动
注意:
如果ng serve --open启动失败,删除model文件夹,然后重新install.
如果没有在项目根目录运行 会出错。
3.目录分析
工程的目录那么多,重要的其实也就几个。
node_modules //安装的第三方模块
src //项目所有文件放在src里面
src/app //组件 以及 app.mdule.ts 定义根模块
src/index.html //首页
src/style.css //全局css样式文件
package.json //npm配置文件
这三个文件就组成了一个组件。
4.组件是什么东西呢?
写angular项目其实就是组件,以组件的形式方便引入.
创建一个组件:
比如我要在app/components文件夹下创建一个header的组件.
先在vscode中右键app目录,创建components文件夹.
然后到工程的根目录,使用命令
ng g component components/header
注意:所有以spec.ts结尾的文件都可以删除.
这个文件是多余的,删除掉.创建完毕之后的目录结构如下:
这个时候可以直接在首页app.components.html中引入这个组件了.
这个时候项目会去找路由,路由中添加了新建的组件的路径,他就会自动找到.
而为什么是app-XXXX这个名字呢?
是因为在header.components.ts中,定义好了:
看吧是 'app-header'
5.在自定义的组件中编写代码
news.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-news',
templateUrl: './news.component.html',
styleUrls: ['./news.component.css']
})
export class NewsComponent implements OnInit { // 定义数据 -- 属性
title = 'title变量的值';
// 定义属性的方法2
msg: any;
// 当然可以直接写类型
msgStr: string = '这是string类型的msg'; // 其实变量前面有访问修饰符,默认不写为public
/*
public 共有 可以在类的里外使用 protected 保护类型 只能在当前类和他的子类访问 private 私有只有当前类可以访问这个属性 */
public id = '=123'; public h = ''; public obj={ name : '张三'
} // 数据循环方式1
public list=[]; // 数据循环方式2
public list2:any[]; // 定义一个稍微复杂点的数组
public list3:any[]; //<!-- 对象循环 -->
public list4=[]; constructor() {
this.msg='这是msg,通过constructor赋值';
// 去服务器拉取数据
this.h = '<h2>这个是新闻数据</h2>';
this.list=['1','2','3'];
this.list2=['java','php','dotnet'];
this.list3=[
{'title':'XXX和39位外方领导人围桌共绘"工笔画"'},
{'title':'“一带一路”:如何绘制精谨细腻的“工笔画”'},
{'title':'高峰论坛:刷新中国经济“信心指数” 理上网来'} ];
this.list4=[
{
'username':'小a',
"list":[
{'course':'数学','source':100},
{'course':'语文','source':99},
{'course':'英语','source':80},
]
},{
'username':'小b',
"list":[
{'course':'数学','source':80},
{'course':'语文','source':90},
{'course':'英语','source':100},
] } ];
} ngOnInit() {
} }
news.component.html
<app-header></app-header>
<br>
<h2>这是一个新闻组件</h2> <p>
news works!
</p>
title = {{title}}
<br>
msg= {{msg}}
<br>
msgStr = {{msgStr}}
<br>
<!-- 绑定属性方法1 -->
<div id="{{id}}">这是一个div 调试工具查看属性</div>
<br>
<!-- 绑定属性方法2 -->
<div [title]="msg">使用方括号添加属性 调试工具查看属性</div>
<br>
<!-- 绑定后台HTML数据 -->
<span [innerHTML]="h"></span>
<br>
<!-- 拿到对象数据 -->
{{obj.name}}
<br>
<!-- 循环数据 -->
<ul>
<li *ngFor = "let item of list"> {{item}} </li> </ul>
<!-- 获得索引值 -->
<ul>
<li *ngFor = "let item of list2 ; let key=index">
{{key}}--{{item}}
</li>
</ul>
<!-- 稍微复杂点的循环 -->
<ul>
<li *ngFor = "let item of list3 ; let key=index">
{{key}} -- {{item.title}}
</li>
</ul> <!-- 复杂对象循环 -->
<ul>
<li *ngFor = "let item of list4 ;let key=index">
{{key}} -- {{item.username}}
<ol>
<li *ngFor="let value of item.list">
课程:{{value.course}} -- 成绩:{{value.source}}
</li>
</ol>
</li>
</ul>
<br><br>
<!-- 另外一种循环方式 -->
<!-- <p>另外一种循环方式</p>
<ul>
<li template= "ngFor let item of list3 ; let key=index">
{{key}} -- {{item.title}}
</li>
</ul> -->
6.事件绑定 双向绑定
想使用双向绑定,必须在app.module.ts中引入
import { FormsModule } from '@angular/forms';
并且在@ngModule中添加依赖
@NgModule({
declarations: [ // 自定义组件都需要引入,并且在里面配置
AppComponent, HeaderComponent, NewsComponent, HomeComponent
],
imports: [// 引入其他模块,当前项目依赖哪些模块
BrowserModule,
AppRoutingModule,
FormsModule
],
providers: [], // 定义的服务,放在里面
bootstrap: [AppComponent] //默认启动哪个组件
})
测试代码:
home.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
//定义成员变量
public msg : any;
public username:any;
public flag:any;
public count:any=0;
public search:any='';
constructor() {
this.msg='msg:这是一个home页';
this.username='thomas';
this.flag=false;
this.search='请输入值!';
} //自定义方法1
getMsg(){
//获取属性的值
alert(this.msg); }
//自定义方法2
setUsername() {
// tslint:disable-next-line: triple-equals
if(this.count %2==0){
this.username='chen';
}
else
{
this.username='thomas';
}
this.count++;
console.log(this.count);
}
setTrueFalse(){
if(this.count%2==0)
this.flag=true;
else
this.flag=false;
this.count++;
console.log(this.count); } keyupFunction(e){
alert(e.key); } public str:any='';
keyupSumFunction(e){
this.str+=e.key;
// alert(this.str);
}
ngOnInit() {
} }
hoem.components.html
<h2>{{msg}}</h2>
<p>
home works!
</p>
<br>
<!-- // button执行函数 -->
<button (click)='getMsg()'>执行自定义方法</button>
<br><br>
username:{{username}}
<br>
<button (click)='setUsername()'>改变姓和名</button>
<br><br>
<!-- 演示ngif语句 -->
<button (click)='setTrueFalse()'>点击显示/隐藏</button>
<br>
<div *ngIf="flag">flag=true的情况下面显示</div>
<br><br>
显示每次按下的输入:
<input type="test" (keyup)='keyupFunction($event)'>
<br><br>
<h2>这个是事件绑定:</h2>
显示按下的字母的拼接:
<input type="test" (keyup)='keyupSumFunction($event)'>
{{str}}
<br>
<!-- 双向数据绑定 -->
<h2>这个是双向绑定</h2>
<input type='text' [(ngModel)]='search'/>
{{search}}
Angular4.x学习日志的更多相关文章
- GRE学习日志
发现开博客园真的很有督促作用,今天也顺便开个GRE学习日志吧 2015-02-09:单词 2015-02-10:单词 2015-02-11:单词 2015-03-02:阅读 2015-03-04:阅读 ...
- Cortex-M3学习日志(六) -- ADC实验
上一次简单的总结了一下DAC方面的知识,好吧,这次再来总结一下ADC方面的东东.ADC即Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器.现实世界是由模 ...
- Cortex-M3学习日志(五) -- DAC实验
终于逮了个忙里偷闲的机会,就再学一下LPC1768的外围功能吧,循序渐进是学习的基本规则,也许LPC1768的DAC与8位单片机16位单片机里面集成的DAC操作类似,但是既然这是懒猫的学习日志,就顺便 ...
- webpack2学习日志
webpack说容易也容易,说难也难,主要还是看个人,想学到什么样的程度,很多公司可能要求仅仅是会用就行,但是也有一些公司要求比较高,要懂一些底层的原理,所以还是要花一些时间的,看个人需求.这篇仅仅是 ...
- javascript学习日志:前言
javascript学习日志系列的所有博客,主要理论依据是<javascript权威指南>(犀牛书第6版)以及<javascript高级程序设计第三版>(红色书),目前js行业 ...
- MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志
今天继续Smobiler开发APP的学习日志,这次是做一个title.toolbar.侧边栏三种效果 样式一 一. Toolbar 1. 目标样式 我们要实现上图中的效果 ...
- 我的游戏学习日志3——三国志GBA
我的游戏学习日志3——三国志GBA 三国志GBA由日本光荣公司1991~1995所推出<三国志>系列游戏,该作是光荣在GBA上推出的<三国志>系列作品的第一款.本游戏登场武将总 ...
- 【转】Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
[转]Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性 Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
- composer的安装和使用 学习日志
如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...
随机推荐
- 扫码下单支持同桌单人点餐FAQ
一.使用场景 满足较多商户希望同一桌台,各自点各自的菜品的业态场景(例如杭味面馆,黄焖鸡米饭店,面馆等大多数轻快餐店) 二.配置步骤及注意事项 管理员后台配置--配置管理--店铺配置--扫码点餐tab ...
- Webdriver之API详解(1)
说明 Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择. 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了 ...
- Core官方DI解析(4)--CallSiteRuntimeResolver
CallSiteRuntimeResolver类型是一个创建或获取服务实例的类型,这个类型继承了CallSiteVisitor<TArgument, TResult>这个类型,也是使用 ...
- clipboardjs复制到粘贴板
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- 关于 Be 主
大三在校生 每天不定刷 Leetcode POJ HDU 以及其他算法专题 自己很菜 还没有能力可以帮助别的旁友解决问题 :-( 毕竟有个人每天看着你写代码还是很幸福的事情呢 还是要骄傲夸一下 FH ...
- ABP实践(1)-通过官方模板创建ASP.NET Core 2.x版本+vue.js单页面模板-启动运行项目
1,打开ABP官网下载模板页面 2,根据下图选择对应的选项及输入项目名 注:上图验证码下方的选择框打钩表示下载最新稳定版,不打钩表示下载最新版本(有可能是预览版) 3,解压下载的压缩包 解压之后是个a ...
- maven打包额外的资源文件
在用Maven打包的时候发现,有一些资源文件打包不到jar包中,于是了解了一下Maven的打包配置,最后得到了解决问题的办法. Maven资源文件的默认约定 构建Maven项目的时候,如果没有进行特殊 ...
- [Cordova inAppBrowser 在App内打开浏览器]
方案1: 使用Cordova插件 cordova-plugin-inappbrowser 1. 添加插件 cordova plugin add cordova-plugin-inappbrowser ...
- 001 java简介
JavaSE(Java Standard Edition):标准版本,定位在个人计算机上的应用.(失败) JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用. ...
- springcloud 设置feign超时时间
转载网址:http://www.pianshen.com/article/187038775/