angular与其他的差别

angular cli安装

cnpm install -g @angular/cli 最新版本

cnpm uninstall -g @angular/cli 卸载全局版本

npm install -g @angular/cli@1.2.1 指定版本

环境报错

ionic的安装

cnpm install -g cordova ionc

如果报错

npm install @ionic/app-scripts@latest --save-dev

项目解决问题

npm i --save-dev @angular-devkit/core 报错解决

"@angular/flex-layout": "^5.0.0-beta.13",

安装@angular/cli之后报错

  • 在 Windows 平台上安装 @angular/cli 会报很多 error,那是因为 @angular/cli 在 Windows 平台上面依赖 Python 和 Visual Studio 环境,而很多开发者的机器上并没有安装这些东西
  • Windows 64位:https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi
  • npm install --global --production windows-build-tools

创建项目

ng new 项目名称 创建项目

cd 项目名

cnpm install // cnpm install --by=npm

ng serve --open //直接打开 npm sr npm stast

快速删除node_modules

npm install rimraf -g

rimraf node_modules

rm -rf node_modules

清楚缓存

npm cache clean

生命周期

ngOnInit 初始化状态

ngDoCheck 事件发生改变的状态

项目结构分析

.angular-cli.json Angular CLI 的配置文件

.editorconfig 给你的编辑器看的一个简单配置文件

.gitignore 一个Git的配置文件

karma.conf.js 给Karma的单元测试配置

src目录结构

app/app.component.{ts,html.css,spec,ts} 组件使用HTML模块,css样式和单元测试定义AppComponent组件,他是根组件

app/app.module.ts 定义AppModule,这个跟模块会告诉Angular如何申明组件

assets/* 静态文件

environments/* 这个文件夹中包括为各个环境准备的文件

favicon.ico 请把他换成你自己的图标

mian.ts 这是应用的主要入口点

jQuery和Bootstrap

安装jQuery和Bootstrap

npm install jquery --save

npm install bootstrap --save

cnpm i -S bootstrap@3.3.7 指定版本

让Typescript类型识别jquery和Bootstrap类型的描述文件

npm install @types/jquery --save-dev

npm install @types/bootstrap --save-dev

.angular-cli.josn 文件中的apps下scripts里分别写入

  1. "../node_modules/jquery/dist/jquery.min.js",
  2. "../node_modules/bootstrap/dist/js/bootstrap.min.js"

在全局引入css找到style.css文件.写入全局样式

  1. @import "~bootstrap/dist/css/bootstrap.min.css";

生成组件

在根目录运行ng g component component/navbar 生成导航条组件(在component下创建navbar组件)并会app.module.ts 里面添加这个组件并且声明组件

组件名 用途
app 项目自带的默认component
navbar 网页/APP导航条
search 搜索区域
product 商品详情
stars 星级评分
foot 底部信息

打开我们的app.component.html把单页面应用的基本骨架搭建起来

组件

app.conponents.ts这个组件

@Component组件的装饰器

selector 用来定义组件渲染的标签名称,说白了就是组件的名字

templateUrl 用来指定组件的模板文件

styleUrls 一个数组,用来存放组件相关的样式文件

  1. import {Components.ts} from "@angular/core"
  2. @Component({
  3. selector:"app-root",
  4. templateUrl:"./app.component.html"
  5. styleUrls:["./app.component.css"]
  6. })
  7. export class AppComponent{
  8. title="app"; //组件的数据,或者函数
  9. }

Angular的指令

  • 组件:用于构建UI组件,继承与Directive类
  • 属性指令:用于改变组件的外观或行为
  • 结构指令: 用于动态添加或者DOM元素来改变DOM布局

Component(组件)是整个框架的核心,也是终极目标,"组件化"的意义有2个:

  • 第一是分治,因为有了组件之后,我们可以把各种逻辑封装在组件内部,避免混在一起
  • 第二是复用,封装成组件之后不仅可以在项目内部复用,而且可以沉淀下来跨项目复用

typescript

npm install -g typescript 全局配置

tsc -version 查看安装的版本

tsc 文件路径 编译成js

总结

变量声明

  • let
  • const

基本数据类型

  • boolean 布尔值

  • number 数字

  • string 字符串

  • 数组 number[]或者Array

  • 元祖[number,string]

    • let arr3:[number,string]=[10,"jack"]
  • 对象object

  • 接口interface

      1. interface Person{
      2. name:string,
      3. age:number
      4. }
      5. let user:Person={
      6. name:"jack",
      7. age:18
      8. }
  • 任意类型any在不确定类型的情况下可以使用any但是尽量少用

  • 函数空返回值void

  • nullundefined

  • *ngFor *ngIf ng-template与[ngIf]直接给大盒子进行数据绑定

    1. <li *ngFor="let todo of todos"> {{todo.title}}</li>

const todos=[{id:1,title:'小明',done:true}]

<footer class="footer" *ngIf="todos.length">

<ng-template [ngIf]="todos.length">

  1. * `ngClass="{类名:true}"` //可以跟双向双向绑定一起进行绑定class
  2. ### 基础项目: TodoMVC
  3. ### 修改端口
  4. `ng serve --port 4201`
  5. ### 声明属性的几种方式
  6. public 默认 可以再这个类中使用,也可以再累外面使用
  7. protected 保护类里 他只有在当前类和他的子类里面可以访问
  8. private 已有 只有在当前类才可以访问这个属性
  9. `<div id="{{msg}}">ffff</div>`
  10. `<div [title]="msg">鼠标喵上去</div>`
  11. `<div [innerHTML]="h"></div>` //可以识别 `constructor` 里面`this.h`的标签内容
  12. ` <li *ngFor="let item of list3;let key=index"> {{item.titlte}}---{{key}} </li>`
  13. ### 双向数据绑定
  14. app.module.ts里面添加

import { FormsModule } from "@angular/forms";

imports: [

  1. FormsModule //添加这个

],


  1. 在表单中双向绑定某个数据需要具有`name`属性
  2. html上添加双向绑定的数据

<input class="toggle" type="checkbox" [(ngModel)]="todo.done">


  1. ### `set` `get` 方法
  2. ```
  3. 访问
  4. get toggleAll() {
  5. return this.todos.every(t => t.done);
  6. }
  7. 赋值
  8. set toggleAll(val) {
  9. this.todos.forEach(t => t.done = val);
  10. }
  11. ```
  12. ### 路由的基本处理
  13. `ng generate module app-routing --flat --module=app`
  14. `app-routing.module.ts`

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

import { FooComponent } from './foo/foo.component'

import { BarComponent } from './bar/bar.component'

const routes: Routes = [

{

  1. path: '',
  2. redirectTo: '/contacts', // 当请求根路径的时候,跳转到contacts联系人组件
  3. pathMatch: 'full' // 必须完全匹配到路径的时候才做重定向

},

// 路由嵌套导航

{

  1. // 当我们访问contacts的时候,会先把LayoutComponent渲染出来
  2. // 然后把children 中path为空的路由渲染到LayoutComponent组件的路由出口上
  3. path: 'contacts',
  4. component: LayoutComponent,
  5. children: [
  6. {
  7. path: '',
  8. component: ContactListComponent
  9. },
  10. {
  11. path: 'new', // 这里的new的请求路径是 /contacts/new
  12. component: ContactNewComponent
  13. },
  14. {
  15. path: 'edit',
  16. component: ContactEditComponent
  17. }
  18. ]

},

{

  1. path: 'foo',
  2. component: FooComponent

},

{

  1. path: 'bar',
  2. component: BarComponent

}

]

@NgModule({

imports: [

  1. RouterModule.forRoot(routes)

],

exports: [ RouterModule ]

})

export class AppRoutingModule {}


  1. [![](http://p3vo2n0jj.bkt.clouddn.com/prefix_20180521211530.png)]()
  2. ### 打包发布
  3. `ng build --prod --aot`
  4. 假设我想打包成`www.w3cways.com/test/index.html`则执行
  5. `ng build --base-href /test/`
  6. 会生成dist文件夹,将dist文件夹中的文件,直接上传到服务器便可访问
  7. ### 压缩打包

ng build --prod --no-extract-license

  1. 倒置所有脚本资源的加载URL指向根目录。Angular Cli 提供一个参数改变该值。
  2. `````
  3. ng build --prod --bh /v2/
  4. `````
  5. ### 封版本
  6. `package.json`
  7. `~` 会匹配最近的小版本 比如`~1.2.3` 会匹配所有`1.2.x`版本
  8. `^` 会匹配最新的大版本 比如 `^1.2.3` 会匹配所有`1.x.x`
  9. `package.json` 文件将`^`改为`~`, `node_modules`文件夹全部删除,重新`cnpm i`
  10. ### 组件传值
  11. * `@Input` 定义子组件传入的变量
  12. * `@Output` 定义输出变量
  13. ```
  14. //父组件html
  15. <li *ngFor="let item of dataSet;let i = index">
  16. <span>{{item.name}}</span>----{{i+1}}--{{item.id}}
  17. <app-child [names]="item" (foo)="bar($event)"></app-child>
  18. </li>
  19. //父组件ts文件
  20. dataSet = [
  21. {"id":0,"name":"张三"},
  22. {"id":1,"name":"李四"},
  23. {"id":2,"name":"王五"},
  24. ]
  25. bar(event:any){
  26. console.log(event);
  27. }
  28. //子组件html代码
  29. <input type="button" value="{{names.name}}" (click)="todo($event)"/>
  30. //子组件ts文件
  31. export class ChildComponent implements OnInit {
  32. @Input() names:any = {}
  33. //定义一个输出的 (记得把Output. Input EventEmitter 需要在标题声明)
  34. @Output() foo = new EventEmitter<string>()
  35. todo(event:any){
  36. this.foo.emit('你好');
  37. }
  38. ```
  39. * angular中使用局部模板变量可以获取到子组件的实例引用
  40. `<app-child [names]="item" (click)="father.childFn()" #father></app-child>`
  41. `在子组件中定义父组件传入的变量 @Input() names:any={}; children(){}`
  42. * 使用@ViewChild获取子组件的引用
  43. 在父组件中` @ViewChild(子组件名称) 随便命名:子组件名称`
  44. ```
  45. @ViewChild(ChildrenComponent) children: ChildrenComponent;
  46. ```
  47. 子组件的变量可以再app-module里面看,调用子组件的方法需要把子组件放在父组件里面
  48. * 中间人模式
  49. 中间人模式相当于就是同时利用输入输出将信息通过两个组件共同的父组件进行组件间的通讯,这个共同的父组件就是中间人

Angular4.0入门的更多相关文章

  1. Angular4.0学习笔记 从入门到实战打造在线竞拍网站学习笔记之二--路由

    Angular4.0基础知识见上一篇博客 路由 简介 接下来学习路由的相关知识 本来是不准备写下去的,因为当时看视频学的时候感觉自己掌握的不错 ( 这是一个灰常不好的想法 ) ,过了一段时间才发现An ...

  2. Angular4.0从入门到实战打造在线竞拍网站学习笔记之三--依赖注入

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 依赖注入(Dependency Injection) 正常情况下,我们写的代码应该是这样子的: let product = ne ...

  3. Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定&管道

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 数据绑定 数据绑定允许你将组件控制器的属性和方法与组件的模板连接起来,大大降低了开发时的编码量. ...

  4. Angular4.0从入门到实战打造在线竞拍网站学习笔记之二--路由

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 路由 简介 接下来学习路由的相关知识 本来是不准备写下 ...

  5. Angular4.0从入门到实战打造在线竞拍网站学习笔记之一--组件

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 最近搞到手了一部Angular4的视频教程,这几天正好 ...

  6. 《Angular4从入门到实战》学习笔记

    <Angular4从入门到实战>学习笔记 腾讯课堂:米斯特吴 视频讲座 二〇一九年二月十三日星期三14时14分 What Is Angular?(简介) 前端最流行的主流JavaScrip ...

  7. ASP.NET Core 1.0 入门——了解一个空项目

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  8. ASP.NET Core 1.0 入门——Application Startup

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  9. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

随机推荐

  1. logback中批量插入数据库的参考代码

    protected void insertProperties(Map<String, String> mergedMap, Connection connection, long eve ...

  2. mysql自带的example测试数据库导入Centos6.5

    1.下载数据库 下载地址: [test数据库] (https://github.com/datacharmer/test_db) 不出意外的话,下载下来是个unzip文件. 2.上传到数据库服务器 r ...

  3. mybatis批量插入

    <insert id="insertBatch" parameterType="java.util.List" > insert into biz_ ...

  4. Celery 分布式任务队列快速入门

    Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置cel ...

  5. html标记语言 --文本标记

    html标记语言 --文本标记 二.文本标记 1.h1-h6 标题标记,h1最大 2.font 字体设置标记 2.1 size字体大小.<font size="> 取值范围1-7 ...

  6. 1025InnoDB log file 设置多大合适

    转自 http://blog.csdn.net/langkeziju/article/details/51094289 数据库的东西,往往一个参数就牵涉N多知识点.所以简单的说一下.大家都知道inno ...

  7. vue基础特性

    在这里我们主要是讲解一些vue实例的属性和一些基础的指令 vue实例属性: 其实和我们之前所学的对象的属性是相似的东西 vue的基础指令: 对于指令,大家可能之前么有接触过相关的概念,其实大家可以这样 ...

  8. [LeetCode] Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

  9. [LeetCode] Distribute Candies 分糖果

    Given an integer array with even length, where different numbers in this array represent different k ...

  10. [LeetCode] Find Permutation 找全排列

    By now, you are given a secret signature consisting of character 'D' and 'I'. 'D' represents a decre ...