@angular/cli项目构建--组件
环境:nodeJS,git,angular/cli
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g @angular/cli@1.4.9
ng new angularDemo
ng -v
ng set --global packageManager=cnpm
npm install jquery --save
npm install bootstrap --save
bootstrap style 如果用cnpm安装则需要npm安装才可在idea智能提示
npm install @types/jquery --save-dev
npm install @types/bootstrap --save-dev
npm install FortAwesome/Font-Awesome --save//图标样式fa
使jQuery&&Bootstrap生效导入(.angular-cli.json)
"styles": [
"styles.css",
"../node_modules/_bootstrap@3.3.7@bootstrap/dist/css/bootstrap.min.css"
],
"scripts": [
"../node_modules/_jquery@3.2.1@jquery/dist/jquery.min.js",
"../node_modules/_bootstrap@3.3.7@bootstrap/dist/js/bootstrap.min.js"
],
启动项目开发环境
ng serve or npm run start
生成组件
ng generate component navBar
ng g c search product stars foot
ng g c new-component --module app :如果有多个module
布局
<!--导航条-->
<app-navbar></app-navbar>
<!--/导航条-->
<!--主要内容容器-->
<div class="container">
<div class="row">
<!--左侧-->
<div class="col-md-3">
<!--搜索区域-->
<app-search></app-search>
<!--/搜索区域-->
</div>
<!--/左侧-->
<!--右侧-->
<div class="col-md-9">
<div class="row">
<!--轮播图-->
<app-carousel></app-carousel>
<!--/轮播图-->
</div>
<div class="row">
<!--商品信息-->
<app-product></app-product>
<!--/商品信息-->
</div>
</div>
<!--/右侧-->
</div>
</div>
<!--/主要内容容器-->
<!--底部信息-->
<app-footer></app-footer>
<!--/底部信息-->
navBar.html
<!--Bootstrap导航条-->
<nav class="navbar navbar-inverse navbar-fixed">
<!--导航条内容容器-->
<div class="container">
<!--导航条头部-->
<div class="navbar-header">
<button class="navbar-toggle btn" data-toggle="collapse" data-target="#navbar-collapse-menu">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--//商标/Logo-->
<a class="navbar-brand" href="javascript:void(0)">在线竞拍</a>
</div>
<!--/导航条头部-->
<!--导航条列表菜单-->
<div class="collapse navbar-collapse" id="navbar-collapse-menu">
<ul class="nav navbar-nav">
<li><a href="javascript:void(0)">关于我们</a></li>
<li><a href="javascript:void(0)">联系我们</a></li>
<li><a href="javascript:void(0)">网站地图</a></li>
</ul>
</div>
<!--/导航条列表菜单-->
</div>
<!--/导航条内容容器-->
</nav>
<!--/Bootstrap导航条-->
默认的全局css文件是/src/style.css
当然也可以在配置文件中更改或者添加新的css文件
/* You can add global styles to this file, and also import other style files */
@import "../node_modules/bootstrap/dist/css/bootstrap.css";
@import "../node_modules/font-awesome/css/font-awesome.css";
每一个组件对应的css样式我们应该分开写,比如navbar的css写在navbar.component.css文件中
foot.html
<div class="container">
<hr>
<footer>
<div class="row">
<div class="col-md-12">
<p>Angular打造竞拍网站</p>
</div>
</div>
</footer>
</div> footer{
text-align: center;
}
search.html
<form role="form" name="searchForm">
<div class="form-group">
<label for="productTitle" class="control-label">商品名称 : </label>
<input id="productTitle" type="text" class="form-control" placeholder="商品名称">
</div>
<div class="form-group">
<label for="productPrice" class="control-label">商品价格 : </label>
<input id="productPrice" type="number" class="form-control" placeholder="商品价格">
</div>
<div class="form-group">
<label for="productCategory" class="control-label">商品类别 : </label>
<select id="productCategory" class="form-control"></select>
</div>
<div class="form-group">
<label for="productTitle" class="control-label">商品名称 : </label>
<input type="submit" class="btn btn-primary btn-block" value="搜索">
</div>
</form>
轮播图组件
<div class="carousel slide" data-ride="carousel">
<!--轮播图导航区域-->
<ol class="carousel-indicators">
<li class="active"></li>
<li></li>
<li></li>
</ol>
<!--/轮播图导航区域-->
<!--轮播图片区域-->
<div class="carousel-inner">
<div class="item active">
<img src="http://placehold.it/800x300" alt="carousel" class="slide-image">
</div>
<div class="item">
<img src="http://placehold.it/800x300" alt="carousel" class="slide-image">
</div>
<div class="item">
<img src="http://placehold.it/800x300" alt="carousel" class="slide-image">
</div>
</div>
<!--/轮播图片区域-->
<!--轮播图控制按钮-->
<a href="javascript:$('.carousel').carousel('prev')" class="left carousel-control">
<i class="glyphicon glyphicon-chevron-left"></i>
</a>
<a href="javascript:$('.carousel').carousel('next')" class="right carousel-control">
<i class="glyphicon glyphicon-chevron-right"></i>
</a>
<!--/轮播图控制按钮-->
</div> .slide-image{ width:100%; }
商品详情组件
product.component.ts
export class Product {
constructor(
public id: number,
public title: string,
public price: number,
public rating: number,
public desc: string,
public categories: Array<string>
) { }
}
在这个ts文件中进行商品(对象)的实例化(http replace here):
export class ProductComponent implements OnInit { public products: Array<Product>; constructor() {
} ngOnInit() {
this.products = [
new Product(1, '第一个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电']),
new Product(2, '第二个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电']),
new Product(3, '第三个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电']),
new Product(4, '第四个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电']),
new Product(5, '第五个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电']),
new Product(6, '第六个商品', 899, 3.5, '这是一个垃圾电脑', ['电子产品', '家电'])
]
} }
在模块实例化的时候获取到商品对象列表,并传递到component模板中
ngOnInit()
方法会在component实例化的时候自动调用一次,这个知识点稍后会更详细讲到
product.component.html
<div class="col-sm-4 col-md-4 col-lg-4" *ngFor="let product of products">
<div class="thumbnail">
<img src="http://placehold.it/320x150" alt="商品图片">
<div class="caption">
<h4 class="pull-right">¥{{product.price}}</h4>
<h4><a>{{product.title}}</a></h4>
<p>{{product.desc}}</p>
</div>
<div>
<app-stars></app-stars>
</div>
</div>
</div>
星级评分组件
把Production component
的product.rating
注入到Star Component
中
export class StarsComponent implements OnInit {
@Input()
public rating: number;
public stars = []; constructor() {
} ngOnInit() {
const full: number = Math.floor(this.rating);
const half: number = Math.ceil(this.rating - full);
const empty: number = 5 - full - half;
for (let i = 0; i < 5; i++) {
if (i < full) {
this.stars.push('full');
} else if (i === full && half !== 0) {
this.stars.push('half')
} else {
this.stars.push('empty')
}
}
}
}
<app-stars [rating]="product.rating"></app-stars>
<p>
<i *ngFor="let star of stars" class="fa"
[class.fa-star]="star==='full'"
[class.fa-star-half-o]="star==='half'"
[class.fa-star-o]="star==='empty'"
></i>
<span>{{rating}}星</span>
</p>
@angular/cli项目构建--组件的更多相关文章
- @angular/cli项目构建--modal
环境准备: cnpm install ngx-bootstrap-modal --save-dev impoerts: [BootstrapModalModule.forRoot({container ...
- @angular/cli项目构建--Dynamic.Form
导入所需模块: ReactiveFormsModule DynamicFormComponent.html <div [formGroup]="form"> <l ...
- @angular/cli项目构建--animations
使用方法一(文件形式定义): animations.ts import { animate, AnimationEntryMetadata, state, style, transition, tri ...
- @angular/cli项目构建--interceptor
JWTInterceptor import {Injectable} from '@angular/core'; import {HttpEvent, HttpHandler, HttpInterce ...
- @angular/cli项目构建--路由3
路由定位: modifyUser(user) { this.router.navigate(['/auction/users', user.id]); } 路由定义: {path: 'users/:i ...
- @angular/cli项目构建--httpClient
app.module.ts update imports: [ HttpClientModule] product.component.ts import {Component, OnInit} fr ...
- @angular/cli项目构建--路由2
app.module.ts update const routes: Routes = [ {path: '', redirectTo: '/home', pathMatch: 'full'}, {p ...
- @angular/cli项目构建--路由1
app.module.ts import {BrowserModule} from '@angular/platform-browser'; import {NgModule} from '@angu ...
- @angular/cli项目构建--Dynamic.Form(2)
form-item-control.service.ts update @Injectable() export class FormItemControlService { constructor( ...
随机推荐
- ABAP权限检查,TCode与权限对象进行关联
一.确认权限对象,和关联字段: Tcode:SU21 维护权限对象例如"M_MSEG_WMB",它关联字段为'WERKS'M_MSEG_WMB 物料凭证:工厂 二.在ABAP代码中 ...
- java ReentrantLock可重入锁的使用场景
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些. 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) a.用在定时任务时,如果任务执行时间可能超过下次 ...
- str字符串、bool类型常用方法总结
字符串拼接 必须是字符串与字符串拼接 print('马化腾'+'马云') print('马化腾' * 10) 将打印10个马化腾 字符串翻转 [ : :-1] 字符串可以加和乘,不能减和乘 input ...
- 【转】Linux磁盘文件系统类型
1. 查询命令 [root@mail ~]# df -Th 参数说明: -T 显示文件系统类型. -h:以容易理解的格式输出文件系统大小,例如124KB.345MB.46GB. 转自:https:// ...
- linux mint —— 图片一张
概述 Linux Mint是一種基於Ubuntu開發出的Linux操作系统.由Linux Mint Team团队于2006年开始发行.Linux Mint 的目标是为家庭用户和企业客户提供一个免费.高 ...
- 建议40:深入掌握ConfigParser
# -*- coding:utf-8 -*- ''' 1.getboolean() 根据一定的规则将配置项的值转换为布尔值 getboolean() 的真值规则: 0.no.false 和off 都会 ...
- Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介
转:https://www.cnblogs.com/shoemaker/p/linux_graphics02.html 1. Framebuffer Framebuffer驱动提供基本的显示,fram ...
- 【Head First Servlets and JSP】笔记13:session & cookie
session的接口 杀死会话 cookie的性质 cookie的接口 再总结——cookie.session.JSESSIONID的前世今生 简单的定制cookie示例 1.session的接口,配 ...
- CSS3 3D发光切换按钮
在线演示 本地下载
- Hadoop程序基础模板
分布式编程相对复杂,而Hadoop本身蒙上大数据.云计算等各种面纱,让很多初学者望而却步.可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通 ...