ng2 学习笔记(一)

ng2发布了一段时间,最近才开始着手学习一下,ng2可以说变化海是比较大的,现在写一些学习过程中要注意的点,新手可以参考,大神可以指导:

按照文档来吧:

1、快速开始:没什么可说的,直接上git 克隆官方的quick-start,

git clone https://github.com/angular/quickstart.git quickstart
cd quickstart
npm install
npm start

2、官方的第一个例子:

ngFor循环列表,ng2要定义一个局部变量,还要注意前面的*号:<li *ngFor="let list of listArr">{{list}}</li>;注意下格式就ok了;

3、用户输入:

这个例子个人觉得用到的场景不会太多;

主要是是涉及到input框的的事件绑定以及value的获取方式:

  1)、直接绑定事件:(keyup)="keyUpEvent($event)";这里传入了一个$event事件,由于$event是一整个DOM元素事件及属性,所以效率比较低;

  2)、angularjs的模版引用变量直接访问input的值;<input (keyup)="uinput2(box2.value)" #box2/>;效率比较高推荐使用;

  3)、当input要绑定处理事件的时候,可以1)、2)方法合用。<input type="text" (keyup.enter)="addList(list.value)" #list/>

4、表单:这个用处比较大,主要用到的是数据的双向数据绑定[(ngModel)]="args";

这里有一个坑,就是要完成表单的双向数据绑定需要加载一个angular模块FormsModule,这个模块要在app.module的主模块里引用,并且在@NgModule的imports里加入。这样才能正常工作,不然双向数据绑定不上。应该是双向数据绑定都要引入FormsModule这个模块;至于表单验证在下一次总结在写;

【其他的坑】:

1、定义一个组件时,要引用时都需要在app.module的主模块了进行引入;并且在@NgModule的declarations里声明;

2、ngnice.cn这个angular中文网上的文档,比较坑,基础的绑定等操作在后面,实例在前面,这样容易对新手造成困惑;

下面贴一下代码:

app.module.ts文件:

import { NgModule }      from ‘@angular/core‘;
import { BrowserModule } from ‘@angular/platform-browser‘;

import { FormsModule } from ‘@angular/forms‘;
import { AppComponent }  from ‘./app.component‘;
import { ClickMeComponent } from ‘./click-me.component‘;
import { UserForm } from ‘./form.component‘;

@NgModule({
  imports:      [ BrowserModule ,FormsModule],
  declarations: [ AppComponent , ClickMeComponent,UserForm,],
  bootstrap:    [ AppComponent ]
})

export class AppModule { }

用户输入组件的代码:

import { Component } from ‘@angular/core‘;

@Component({
    selector:‘user-input‘,
    template:`
        <h2>用户输入:</h2><hr />
        <h4>绑定keyUp事件获取用户输入事件</h4>
        <input (keyup)="uinput($event)" />
        <p>您输入的信息是:{{msg}}</p>
        <br />
        <h4>使用 Angular 的模板引用变量</h4>
        <input (keyup)="0" #box/><b>(已输入{{box.value.length}}个字,还可以输入:{{10-box.value.length}}个字)</b>
        <p>您输入的信息是:{{box.value}}</p>
        <br />
        <h4>组合使用效率更高</h4>
        <input (keyup)="uinput2(box2.value)" #box2/>
        <b *ngIf="box2.value.length<=10">(已输入{{box2.value.length}}个字,还可以输入:{{10-box2.value.length}}个字)</b>
        <b *ngIf="box2.value.length>10">(超过输入:{{box2.value.length-10}}个字)</b>
        <p>您输入的信息是:{{msg2}}</p>
        <br />
        <h3>实例:</h3>
        <div>
            <input type="text" (keyup.enter)="addList(list.value)" #list/>
            <button (click)="addList(list.value)">添加到列表</button>
            <ul>
                <li *ngFor="let list of likeList">{{list.call}}</li>
            </ul>
        </div>
    `
})

export class ClickMeComponent {
    msg = ‘未输入‘;
    uinput(evt){
        // 传递整个dom以及事件,性能差
        console.log(evt);
        this.msg = evt.target.value ? evt.target.value : ‘未输入‘;
    }

    msg2 = ‘未输入‘;
    uinput2(val:string){
        if(val.length>10){
            this.msg2 = val.substring(0,10) ? val.substring(0,10) : ‘2未输入‘;
        }else{
            this.msg2 = val ? val : ‘2未输入‘;
        }
    }

    likeList = [
        {"id":1000,"call":"读书"}
    ];
    addList(val){
        var id = +new Date();
        this.likeList.push({"id":id,"call":val});
    }
}

FORM表单的数据绑定:

import { Component } from ‘@angular/core‘;
import { Hero } from ‘./hero‘;

@Component({
    selector:‘hero-form‘,
    template:`
        <h2>FORM 表单</h2>
        <hr />
        <div class="container">
            <h4>Hero Form</h4>
            <form>
                <div class="form-group">
                    <label for="name">Name</label>
                    <input type="text" class="form-control" name="name" [(ngModel)]="model.name" id="name" required>
                </div>
                <div class="form-group">
                    <label for="power">Hero Power</label>
                    <select class="form-control" id="power" [(ngModel)]="model.power" required name="power">
                        <option *ngFor="let pow of powers" [value]="pow">{{pow}}</option>
                    </select>
                </div>
                <div class="form-group">
                    <label for="alterEgo">Alter Ego</label>
                    <input type="text" class="form-control" [(ngModel)]="model.alterEgo" name="alterEgo" id="alterEgo">
                </div>
                <button type="button" (click)="submit()" class="btn btn-default">Submit</button>
            </form>
        </div>
    `
})

export class UserForm {
    powers = [‘Really Smart‘, ‘Super Flexible‘,
            ‘Super Hot‘, ‘Weather Changer‘];
      model = new Hero(18, ‘Dr IQ‘, this.powers[0], ‘Chuck Overstreet‘);
      submitted = false;
      //onSubmit() { this.submitted = true; }
      submit(){
          console.log(this.model)
      }
}

以上内容欢迎各位大神批评指导!

时间: 2024-10-08 10:03:29

ng2 学习笔记(一)的相关文章

ng2 学习笔记(三)依赖注入与服务

前两篇文章简单介绍了ng2的一些基础用法,基本和ng1的使用风格差不多,只是写法和开发方式变化比较大. 这一篇,来总结一下ng的依赖注入与服务.官方的教程上是把他分开来讲的,个人感觉放在一起比较容易理解. 同样,这篇文章适合新手阅读.好,那我们开始正文: 在ng1,也有依赖注入的概念,ng1的依赖注入方式这里就不去多叙述了,有兴趣的可以查阅一下ng1的依赖注入方式. ng2依然有这个概念.下面举例来说明ng2里怎么使用依赖注入以及服务: [场景]:在某个项目里面,有很多页面都用到同一个功能,这个

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------