使用Angular CLI快速创建Angular项目的一些基本概念和写法小结


Posted in Javascript onApril 22, 2018

Angular CLI是一个命令行界面工具,它可以创建项目、添加文件以及执行一大堆开发任务,比如测试、打包和发布,这里的快速开始就是基于这个命令。

开始项目前,你需要先安装node和npm,然后执行npm install -g @angular/cli安装Angular CLI。

一:用命令行新建一个项目

ng new newApp --skip-install
cd newApp
cnpm install
ng serve --open

执行上面的命令就会自动新建一个Angualr项目,并启动了项目。

其中--skip-install表示node包先不安装,我们接着使用cnpm install安装会快多了。

二:目录结构

现在来看看ng命令帮助我们生成了什么,也就是项目的目录结构,里面都是干什么的,先有个大致了解,你可以不知道全部,不过先记住下面几个个人感觉重要的:

1.src:应用代码存放的地方;

2.src/app:你的代码主要存放的地方,这样说也许不合适,不过你开发的时候,大部分时间都是在修改这里的代码;

3.src/assets:图片等存放的地方,构建时会复制到发布包里;

4.src/main.js:你基本不会修改它,它是程序的主入口;

5.src/styles.css:特别用的样式写在对应的地方,后面会说,对于公共的样式就会写在这里;

6.karma.conf.js:给Karma的单元测试配置,当运行ng test时会用到它。

三:自定义组件

import { Component } from '@angular/core';
@Component({
  selector: 'my-comp',
  template: '<ul><li *ngFor='let row of dataList'>ID:{{row.id}} INFO:{{row.info}}</li></ul>',  
  styles: [`ul{background-color: antiquewhite;padding-left: 10px;list-style: none;}`]
  
})
export class MyComponent {
  dataList = [
    { id: 1, info: "Angular" },
    { id: 2, info: "React" },
    { id: 3, info: "Vue" }
  ];  
}

上面就已经定义好了一个非常简单的组件,不过在使用前,你还需要在模块中定义,此时就是src/app/app.module.ts中注册:

import { NgModule } from '@angular/core';
import { MyComponent } from './my.component';
@NgModule({
  declarations: [
    MyComponent
  ]  
})
......

现在已经注册好了,你就可以使用了,上面的例子的使用方法很简单,就是自定义了一个标签my-comp,和普通的div的用法一模一样。

需要注意的是,为了方便查看,在注册的例子中我去掉了无关的代码,实际情况还好有包括启动,别的组件,服务等的注册,你可以看看命令行自动生成的别的指令,这里主要还是说明更重要的东西,下同。

类似AngularJS,Angular的selector除了上面的自定义标签,还有别的:

1.selector: 'element-name'//自定义标签选择器;

2.selector: '.class'//样式选择器;

3.selector: '[attribute]'//属性选择器;

4.selector: '[attribute=value]'//属性值选择器;

5.selector: ':not(sub_selector)'//取反选择器;

6.selector: 'selector1, selector2'//多种选择器。

四:自定义服务

和组件一样,我们先来定义一个服务。

import { Injectable } from '@angular/core';
export class DataFormat { 
  id: number; 
  info: string; 
}

@Injectable()
export class MyServ {
  getData(): DataFormat[] {
    return [
      { id: 1, info: "Angular" }, 
      { id: 2, info: "React" }, 
      { id: 3, info: "Vue" }
    ];
  }  
}

接着来注册它,服务和组件在注册上有点不同,我们现在先注册在主组件上面吧,默认就是在arc/app/app.component.ts文件中注册:

import { Component } from '@angular/core';
import { MyServ } from './my.service';
@Component({
  providers: [MyServ]  
})

服务的使用也很简单,我们这里用构造函数来演示一下:

import { MyServ } from './my.service';
......
export class MyComponent {
  dataList: any[];  
  constructor(private demoService: MyServ) {
     this.dataList = this.demoService.getData();
    }  
}

还记得自定义组件的代码吗?我们就在其中演示了服务的用法,上面只给出了修改的部分代码。

五:路由的使用

我们这里给出路由的一个简单用法,具体的细节和上面的类似,会单独再去讨论,这篇文章的目的就是快速入门使用。

为了方便演示,我们默认已经定义好了二个组件:MyComponent和My2Component。

首先需要确定index.html页面的head标签中定义好了<base href="/" rel="external nofollow" >或动态生成该元素的脚本。

我们先在src/app/app.module.ts中注册路由:

......
import { RouterModule } from '@angular/router';

@NgModule({
  declarations: [MyComponent,My2Component],  
  imports: [  
    RouterModule.forRoot([    
      {path: 'my',component: MyComponent},      
      {path: 'my2',component: My2Component}      
    ])
  ]
  ......
})
......

使用就很简单了:

<a routerLink="/my">toMycomp</a>
<a routerLink="/my2">toMy2comp</a>
<router-outlet></router-outlet>

点击toMycomp或者toMy2comp就会跳转对应的路由设置的组件了。

六:HTTP

由于@angular/http库中的HttpModule保存着http相关的服务,需要先引入进来(这里是在src/app/app.module.ts中引入):

import { HttpModule }  from '@angular/http';
@NgModule({
  imports: [HttpModule]  
})
......

现在,http就是一个服务,下面简单演示一种用法:

......
import { Http } from '@angular/http';
......
  constructor(private http: Http) {  
    http.get('assets/XXX.json').forEach(function (data) {    
      console.log(data['_body']);      
    });    
  }  
......

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 页面载入进度条实现代码
Feb 08 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
Aug 26 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
对js eval()函数的一些见解
Aug 15 Javascript
js动态生成form 并用ajax方式提交的实现方法
Sep 09 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
three.js加载obj模型的实例代码
Nov 10 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
element-ui 实现响应式导航栏的示例代码
May 08 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 #Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 #Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 #jQuery
手写简单的jQuery雪花飘落效果实例
Apr 22 #jQuery
JQuery元素快速查找与操作
Apr 22 #jQuery
javaScript产生随机数的用法小结
Apr 21 #Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 #Javascript
You might like
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
smarty模板数学运算示例
2016/12/11 PHP
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
js电话号码验证方法
2015/09/28 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
python解析文件示例
2014/01/23 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
详解Python IO编程
2020/07/24 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
三方股东合作协议书范本
2014/09/28 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
建议书范文
2015/02/05 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Hive日期格式转换方法总结
2022/06/25 数据库