angular表单&服务

本文介绍了Angular中的表单操作,包括表单事件、ngModel的使用和表单验证。详细讲解了如何通过ngModel跟踪控件状态和有效性验证,并强调了name属性的重要性。接着,文章转向服务的创建和使用,强调服务的单例性质和注入方式。最后,简述了如何在Angular中使用HttpClient进行HTTP请求,包括http.get()和http.post()的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、表单

  1. 表单事件

    (keyup.enter)=""
    (blur)=""
    
  2. 表单模板 在模板驱动表单中,你只要导入了FormsModule就不用对<form>做任何改动来使用FormsModule。

    <form #loginForm="ngForm">
    

    loginForm变量是一个到NgForm指令的引用,它代表该表单的整体。

    Angular会在<form>标签上自动创建并附加一个NgForm指令。

    NgForm指令为form增补了一些额外特性。 它会控制那些带有ngModel指令和name属性的元素,监听他们的属性(包括其有效性)。 它还有自己的valid属性,这个属性只有在它包含的每个控件都有效时才是真。

    不要忘记表单元素要有name属性哦!!

    在内部,Angular 创建了一些FormControl,并把它们注册到NgForm指令,再将该指令附加到

    标签。 注册每个FormControl时,使用name属性值作为键值。

  3. 通过 ngModel 跟踪修改状态与有效性验证

    通过ngModel可以获取表单元素的状态,但是必要条件:

    • 元素要有name属性
    • 通过ngModel进行双向绑定(要绑定到ts文件中的变量)
    • 如果要显示它的状态、需要给表单定义一个模板变量(#name)
    • 通过模板变量的className属性显示

    控件被访问过: ng-touched ng-untouched 控件的值变化: ng-dirty ng-pristine 控件的值有效: ng-valid ng-invalid

    我们可以通过这类样式控制表单的交互

    .ng-valid[required], .ng-valid.required{
      border-left: 5px solid #42A948; /* green */
    }
    
    .ng-invalid:not(form)  {
      border-left: 5px solid #a94442; /* red */
    }
    
    

    带状态提示框的表单

    <form #loginForm="ngForm">
    
Telephone
Name is required
Password

<button type="submit" class="btn btn-default" [disabled]="!loginForm.form.valid">Submit

``` 4. 提交表单
```
<form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm)">...

onSubmit(ele){
    console.log(ele.form.value);
  }
```
  1. 表单验证

    <div class="form-group">
    <div *ngIf="myemail.invalid && (myemail.dirty || myemail.touched)"
         class="alert alert-danger">
      <div *ngIf="myemail.errors.required">
        号码不能为空
      </div>
      <div *ngIf="myemail.errors.pattern">
        号码格式不正确
      </div>
    
    </div>
    
```

二、服务

  1. 新建服务

    ng generate service name
    

    注意

    1. 服务是一个单例对象

    2. 服务可以在任何组件中单独注入

      providers: [GlobalService,HeroService],
      
  2. 使用服务

    在组件中导入服务模块 在构造函数中创建服务对象

三、Http

  1. 安装HttpClient

    在使用HttpClient之前,要先安装HttpClientModule以提供它。这可以在应用模块中做,而且只需要做一次。

    import {HttpClientModule} from '@angular/common/http';
    
  2. http.get()

    导入HttpClient

    import {HttpClient} from '@angular/common/http';
    
    

    发送http.get(应该放在服务中)

    getPositions(callback){
    this.http.get('http://localhost:3000/positions').subscribe(function (data) {
      callback(data);
    },function (error) {
      console.log(error.message);
      }
    
    );
    

} ```

注意这个subscribe()方法。 所有从HttpClient返回的可观察对象都是冷的(cold),也就是说,它们只是发起请求的蓝图而已。在我们调用subscribe()之前,什么都不会发生,而当我们每次调用subscribe()时,就会独立发起一次请求。

```
const req = http.post('/api/items/add', body);
// 0 requests made - .subscribe() not called.
req.subscribe();
// 1 request made.
req.subscribe();
// 2 requests made.
```
  1. http.post()

    login(body,callback){
    this.http.post('http://localhost:3000/users/login',body).subscribe(function (data) {
        callback(data);
      },function (error) {
        console.log(error.message);
      }
    
    );
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值