首页 > 其他分享 >angular入门篇5----订单创建

angular入门篇5----订单创建

时间:2022-09-24 11:33:05浏览次数:77  
标签:your public order ---- 入门篇 import Order null angular

Angular入门篇5----订单创建

创建订单模型

1.创建订单

在Store/src/app/model下创建如下文件:

order.component.ts

import { Injectable } from "@angular/core";
import { Cart } from "./cart.model";

@Injectable()

export class Order {
    public id: number|null =null;
    public name: string|null =null;
    public address: string|null =null;
    public city: string|null =null;
    public state: string|null =null;
    public zip: string|null =null;
    public country: string|null =null;
    public shipped: boolean = false;
    
    constructor(public cart: Cart) { }

    clear() {
        this.id= null;
        this.name=this.address=this.city=null;
        this.state=this.zip=this.country=null;
        this.shipped=false;
        this.cart.clear();
    }
}

order.repository.ts

import {Injectable } from "@angular/core";
import { Observable, from } from "rxjs";
import { Order } from "./order.model";
import { StaticDataSource } from "./static.datasource";

@Injectable()

export class OrderRepository {
    private orders: Order[]=[];

    constructor(private datasource: StaticDataSource){ }

    getOrders():Order[] {
        return this.orders;
    }

    saveOrder(order: Order): Observable<Order> {
        return this.datasource.saveOrder(order);
    }
}

再将它们注册到model.module.ts中:

img

看到这里我相信很多入门的朋友已经能理解框架的套路了。对比一下Product模型就能发现很多相似点。

再在static.datasource.ts加入一些功能:

img

因为saveOrder函数只是将order打印和返回。如果有提供后端接口,我们大可以将这些数据传至后端处理。

将订单模型展现在Store上

在store/src/app/store内:

1.修改checkout.component.ts为:

import { Component } from "@angular/core"
import { NgForm } from "@angular/forms"
import { OrderRepository } from "../model/order.repository"
import { Order } from "../model/order.model"
import { from } from "rxjs";

@Component({
    moduleId: module.id,
    templateUrl: "checkout.component.html",
    styleUrls: ["checkout.component.css"]
})

export class CheckOutComponent { 
    orderSent: boolean =false;
    submitted: boolean =false;
    
    constructor(public repository: OrderRepository,
        public order: Order){ }

    submitOrder(form: NgForm){
        this.submitted = true;
        
        if(form.valid){
            this.repository.saveOrder(this.order).subscribe(order => {
                this.order.clear();
                this.orderSent = true;
                this.submitted = false;
            })
        }
    }
}

再创建用户详细页面:

checkout.component.html

<div class="navbar navbar-inverse bg-inverse">
    <a class="navbar-brand">SPORT STORE</a>
</div>
<div *ngIf="orderSent" class="m-a-1 text-xs-center">
    <h2>Thanks!</h2>
    <p>Thanks for placing your order</p>
    <p>We'll ship your goods as soon as possible</p>
    <button class="btn btn-primary" routerLink="/store"> Return to Store</button>
</div>
<form *ngIf="!orderSent" #form="ngForm" novalidate
    (ngSubmit)="submitOrder(form)" class="m-a-1">
    <div class="form-group">
        <label>Name</label>
        <input class="form-control" #name="ngModel" name="Name"
        [(ngModel)]="order.name" required/>
        <span *ngIf="submitted && name.invalid" class="text-danger">
            Please enter your name
        </span>
    </div>
    <div class="form-group">
        <label>Address</label>
        <input class="form-control" #address="ngModel" name="Address"
        [(ngModel)]="order.address" required />
        <span *ngIf="submitted && address.invalid" class="text-dnager">
            Please enter your adadress
        </span>
    </div>
    <div class="form-group">
        <label>City</label>
        <input class="form-control" #city="ngModel" name="City"
        [(ngModel)]="order.city" required />
        <span *ngIf="submitted && city.invalid" class="text-dnager">
            Please enter your city
        </span>
    </div>
    <div class="form-group">
        <label>State</label>
        <input class="form-control" #state="ngModel" name="State"
        [(ngModel)]="order.state" required />
        <span *ngIf="submitted && state.invalid" class="text-dnager">
            Please enter your state
        </span>
    </div>
    <div class="form-group">
        <label>Zip/Postal Code</label>
        <input class="form-control" #zip="ngModel" name="Zip"
        [(ngModel)]="order.zip" required />
        <span *ngIf="submitted && zip.invalid" class="text-dnager">
            Please enter your zip/postal code
        </span>
    </div>
    <div class="form-group">
        <label>Country</label>
        <input class="form-control" #country="ngModel" name="Country"
        [(ngModel)]="order.country" required />
        <span *ngIf="submitted && country.invalid" class="text-dnager">
            Please enter your country
        </span>
    </div>
    <div class="text-xs-center">
        <button class="btn btn-secondary" routerLink="/cart">Back</button>
        <button class="btn btn-primary" type="submit">Complete Order</button>
    </div>
</form>

checkout.component.css

input.ng-dirty.ng-invalid{ border: 2px solid #ff0000 }
input.ng-dirty.ng-valid{ border: 2px solid #6bc502}

这可以让有效的input为绿框,无效的为红框。

效果如下:

点击"CheckOut"
img

输入表单(输入成功的绿色边框就是刚刚css文件带来的效果)
img

提交后我们可以在后台看到表单(交给后端的东西):

img

img

img

后续

教程的版本比较滞后,在使用RESTful Web Service时,采用的虚拟数据库无法访问。所以先更新后端的应用,做好接口后再应用到此框架。

参考材料

RESTful Web Service 架构剖析 作者:JeffreyLi

Angular 依赖注入框架里 useExisting 和 useClass 的使用场景 作者:汪子熙

标签:your,public,order,----,入门篇,import,Order,null,angular
From: https://www.cnblogs.com/feoandcode/p/16725222.html

相关文章

  • uniapp中webview全屏不显示导航栏解决方案
    https://www.jianshu.com/p/9a703d21ca81https://www.cnblogs.com/newBugs/p/15905364.htmlhttps://blog.csdn.net/Xc_Wl/article/details/124858496......
  • Java面试题汇总
    1、Java基础1.1、ConcurrentHashMap的底层实现,jdk1.7和jdk1.8的区别;1.2、GC的原理,涉及到的算法有哪些,GC调优怎么处理;1.3、ArrayList和LinkedList的区别是什么,底层实现是......
  • monstache 实时同步mongodb 数据到 elasticsearch
    最近在做数据统计功能,需要将mongodb数据实时同步到 elasticsearch中。目前找到的方案有两种1、通过flinkmongodbcdc flinkmongodbcdc的优点是比较灵活,可以将mong......
  • 核心代码
    多源最短路径Floyd—Warshall//k为开通的中转站,//如果由k站中转得到的路程比原路程少则更改最短路程for(k=1;k<=n;k++)for(i=1;i<=n;i++)......
  • 关于线段树的一点小笔记
    关于线段树的一点小笔记线段树:线段树是一棵天生支持单点修改、查询和区间查询的一棵完全二叉树,其单点修改、查询和区间修改的时间复杂度均为\(\Theta(\lgn)\)在区......
  • IDEA
    IDEA启动Tomcat控制台出现淇℃伅乱码摘要:我是出现以下乱码:解决方式:将此文件中的UTF-8改为GBK阅读全文登录失败使用session传数据摘要:做登录界......
  • 代码随想录刷题第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
    977.有序数组的平方思路一:暴力解法-先将切片的元素全部转换成正数,再对切片进行排序,最后再遍历切片保存原切片中每个元素的平方值代码ret:=make([]int,len(nums))f......
  • 3. 链表
    链表是一种通过指针串联在一起的线性结构,每一个结点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个结点的指针域指向null(空指针的意思)。1.链......
  • 响应式布局—vw布局
    什么是vw?在css中,vw是一种视窗单位,也是相对单位,相对于视口的宽度。视口被均分为100个单位的vw,1vw等于视窗宽度的1%。与之相对应的还有vh,1vh等于视窗高度的1%。我们......
  • 论文摘要加入目录
    第一步:选中摘要,然后按alt+shift+o,点击标记M.   第二步:编辑目录域,alt+F9,后面加上\F,再   第三步:再次alt+F9,恢复目录正常显示,然后点击F9更新域。摘要就加入目录......