表单是几乎每个 Web 应用程序的一部分。虽然 Angular 为我们提供了几个内置 validators (验证器),但在实际工作中为了满足项目需求,我们经常需要为应用添加一些自定义验证功能。接下来我们将着重介绍,如何自定义 validator 指令。

Built-in Validators

Angular 提供了一些内置的 validators,我们可以在 Template-DrivenReactive 表单中使用它们。如果你对 Template-Driven 和 Reactive 表单还不了解的话,可以参考 Angular 4.x Forms 系列中 Template Driven Forms 和 Reactive Forms 这两篇文章。

在写本文时,Angular 支持的内建 validators 如下:

  • required - 设置表单控件值是非空的

  • email - 设置表单控件值的格式是 email

  • minlength - 设置表单控件值的最小长度

  • maxlength - 设置表单控件值的最大长度

  • pattern - 设置表单控件的值需匹配 pattern 对应的模式

在使用内建 validators 之前,我们需要根据使用的表单类型 (Template-Driven 或 Reactive),导入相应的模块,对于 Template-Driven 表单,我们需要导入 FormsModule。具体示例如下:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';@NgModule({imports: [BrowserModule, FormsModule], // we add FormsModule heredeclarations: [AppComponent],bootstrap: [AppComponent]
})
export class AppModule {}

一旦导入了 FormsModule 模块,我们就可以在应用中使用该模块提供的所有指令:

<form novalidate><input type="text" name="name" ngModel required><input type="text" name="street" ngModel minlength="3"><input type="text" name="city" ngModel maxlength="10"><input type="text" name="zip" ngModel pattern="[A-Za-z]{5}">
</form>

而对于 Reactive 表单,我们就需要导入 ReactiveFormsModule 模块:

import { ReactiveFormsModule } from '@angular/forms';@NgModule({imports: [BrowserModule, ReactiveFormsModule],...
})
export class AppModule {}

可以直接使用 FormControlFormGroup API 创建表单:

@Component()
class Cmp {form: FormGroup;ngOnInit() {this.form = new FormGroup({name: new FormControl('', Validators.required)),street: new FormControl('', Validators.minLength(3)),city: new FormControl('', Validators.maxLength(10)),zip: new FormControl('', Validators.pattern('[A-Za-z]{5}'))});}
}

也可以利用 FormBuilder 提供的 API,采用更便捷的方式创建表单:

@Component()
class Cmp {constructor(private fb: FormBuilder) {}ngOnInit() {this.form = this.fb.group({name: ['', Validators.required],street: ['', Validators.minLength(3)],city: ['', Validators.maxLength(10)],zip: ['', Validators.pattern('[A-Za-z]{5}')]});}
}

需要注意的是,我们还需要使用 [formGroup] 指令将表单模型与 DOM 中的表单对象关联起来,具体如下:

<form novalidate [formGroup]="form">...
</form>

接下来我们来介绍一下如何自定义 validator 指令。

Building a custom validator directive

在实际开发前,我们先来介绍一下具体需求:我们有一个新增用户的表单页面,里面包含 4 个输入框,分为用于保存用户输入的 usernameemailpasswordconfirmPassword 信息。具体的 UI 效果图如下:

图片描述

Setup (基础设置)

1.定义 user 接口

export interface User {username: string; // 必填,5-8个字符email: string; // 必填,有效的email格式password: string; // 必填,值要与confirmPassword值一样confirmPassword: string; // 必填,值要与password值一样
}

2.导入 ReactiveFormsModule

app.module.ts

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms';import { AppComponent } from './app.component';@NgModule({imports: [BrowserModule, ReactiveFormsModule],declarations: [AppComponent],bootstrap: [AppComponent]
})
export class AppModule { }

3.初始化 AppComponent

app.component.html

<div><h3>Add User</h3><form novalidate (ngSubmit)="saveUser()" [formGroup]="user"><div><label for="">Username</label><input type="text" formControlName="username"><div class="error" *ngIf="user.get('username').invalid && user.get('username').touched">Username is required (minimum 5 characters, maximum 8 characters).</div><!--<pre *ngIf="user.get('username').errors" class="margin-20">{{ user.get('username').errors | json }}</pre>--></div><div><label for="">Email</label><input type="email" formControlName="email"><div class="error" *ngIf="user.get('email').invalid && user.get('email').touched">Email is required and format should be <i>24065****@qq.com</i>.</div><!--<pre *ngIf="user.get('email').errors" class="margin-20">{{ user.get('email').errors | json }}</pre>--></div><div><label for="">Password</label><input type="password" formControlName="password"><div class="error" *ngIf="user.get('password').invalid && user.get('password').touched">Password is required</div><!--<pre *ngIf="user.get('password').errors" class="margin-20">{{ user.get('password').errors | json }}</pre>--></div><div><label for="">Retype password</label><input type="password" formControlName="confirmPassword" validateEqual="password"><div class="error" *ngIf="user.get('confirmPassword').invalid && user.get('confirmPassword').touched">Password mismatch</div><!--<pre *ngIf="user.get('confirmPassword').errors" class="margin-20">{{ user.get('confirmPassword').errors | json }}</pre>--></div><button type="submit" class="btn-default" [disabled]="user.invalid">Submit</button></form>
</div>

app.component.ts

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';export interface User {username: string; // 必填,5-8个字符email: string; // 必填,有效的email格式password: string; // 必填,值要与confirmPassword值一样confirmPassword: string; // 必填,值要与password值一样
}@Component({moduleId: module.id,selector: 'exe-app',templateUrl: 'app.component.html',styles: [`.error {border: 1px dashed red;color: red;padding: 4px;}.btn-default {border: 1px solid;background-color: #3845e2;color: #fff;}.btn-default:disabled {background-color: #aaa;}`]
})
export class AppComponent implements OnInit {public user: FormGroup;constructor(public fb: FormBuilder) { }ngOnInit() {this.user = this.fb.group({username: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(8)]],email: ['', [Validators.required, Validators.email]],password: ['', [Validators.required]],confirmPassword: ['', [Validators.required]]});}saveUser(): void {}
}

Custom confirm password validator

接下来我们来实现自定义 equal-validator 指令:

equal-validator.directive.ts

import { Directive, forwardRef, Attribute } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';@Directive({selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }]
})
export class EqualValidator implements Validator {constructor(@Attribute('validateEqual') public validateEqual: string) { }validate(c: AbstractControl): { [key: string]: any } {// self value (e.g. retype password)let v = c.value; // 获取应用该指令,控件上的值// control value (e.g. password)let e = c.root.get(this.validateEqual); // 获取进行值比对的控件// value not equalif (e && v !== e.value) return {validateEqual: false}return null;}
}

上面的代码很长,我们来分解一下。

Directive declaration

@Directive({selector: '[validateEqual][formControlName],[validateEqual] [formControl],[validateEqual][ngModel]',providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }]
})

首先,我们使用 @Directive 装饰器来定义指令。然后我们设置该指令的 Metadata 信息:

  • selector - 定义指令在 HTML 代码中匹配的方式

  • providers - 注册EqualValidator

其中 forwardRef 的作用,请参考 - Angular 2 Forward Reference

Class defintion

export class EqualValidator implements Validator {constructor(@Attribute('validateEqual') public validateEqual: string) {}validate(c: AbstractControl): { [key: string]: any } {}
}

我们的 EqualValidator 类必须实现 Validator 接口:

export interface Validator {validate(c: AbstractControl): ValidationErrors|null;registerOnValidatorChange?(fn: () => void): void;
}

该接口要求定义一个 validate() 方法,因此我们的 `EqualValidator 类中就需要实现 Validator 接口中定义的 validate 方法。此外在构造函数中,我们通过 @Attribute('validateEqual') 装饰器来获取 validateEqual 属性上设置的值。

Validate implementation

validate(c: AbstractControl): { [key: string]: any } {// self value (e.g. retype password)let v = c.value; // 获取应用该指令,控件上的值// control value (e.g. password)let e = c.root.get(this.validateEqual); // 获取进行值比对的控件// value not equalif (e && v !== e.value) return { // 若不相等,返回验证失败信息validateEqual: false}return null;
}

Use custom validator

要在我们的表单中使用自定义验证器,我们需要将其导入到我们的应用程序模块中。

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms';import { EqualValidator } from './equal-validator.directive';import { AppComponent } from './app.component';@NgModule({imports: [BrowserModule, ReactiveFormsModule],declarations: [AppComponent, EqualValidator],bootstrap: [AppComponent]
})
export class AppModule { }

以上代码成功运行后,我们来验证一下刚实现的功能:

友情提示:演示需要先把密码框的类型设置为text

  • 步骤一

图片描述

  • 步骤二

图片描述

看起来一切很顺利,但请继续看下图:

图片描述

什么情况,password 输入框的值已经变成 12345 了,还能验证通过。为什么会出现这个问题呢?因为我们的只在 confirmPassword 输入框中应用 validateEqual 指令。所以 password 输入框的值发生变化时,是不会触发验证的。接下来我们来看一下如何修复这个问题。

Solution

我们将重用我们的 validateEqual 验证器并添加一个 reverse 属性 。

<div><label for="">Password</label><input type="text" formControlName="password" validateEqual="confirmPassword" reverse="true"><div class="error" *ngIf="user.get('password').invalid && user.get('password').touched">Password is required</div><!--<pre *ngIf="user.get('password').errors" class="margin-20">{{ user.get('password').errors | json }}</pre>-->
</div>
<div><label for="">Retype password</label><input type="text" formControlName="confirmPassword" validateEqual="password"><div class="error" *ngIf="user.get('confirmPassword').invalid && user.get('confirmPassword').touched">Password mismatch</div><!--<pre *ngIf="user.get('confirmPassword').errors" class="margin-20">{{ user.get('confirmPassword').errors | json }}</pre>--></div>
  • 若未设置 reverse 属性或属性值为 false,实现的功能跟前面的一样。

  • reverse 的值设置为 true,我们仍然会执行相同的验证,但错误信息不是添加到当前控件,而是添加到目标控件上。

在上面的示例中,我们设置 password 输入框的 reverse 属性为 true,即 reverse="true"。当 password 输入框的值与 confirmPassword 输入框的值不相等时,我们将把错误信息添加到 confirmPassword 控件上。具体实现如下:

equal-validator.directive.ts

import { Directive, forwardRef, Attribute } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';@Directive({selector: '[validateEqual][formControlName],[validateEqual][formControl],    [validateEqual][ngModel]',providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }]
})
export class EqualValidator implements Validator {constructor(@Attribute('validateEqual') public validateEqual: string,@Attribute('reverse') public reverse: string) { }private get isReverse() {if (!this.reverse) return false;return this.reverse === 'true';}validate(c: AbstractControl): { [key: string]: any } {// self valuelet v = c.value;// control vlauelet e = c.root.get(this.validateEqual);// value not equal// 未设置reverse的值或值为falseif (e && v !== e.value && !this.isReverse) { return {validateEqual: false}}// value equal and reverse// 若值相等且reverse的值为true,则删除validateEqual异常信息if (e && v === e.value && this.isReverse) { delete e.errors['validateEqual'];if (!Object.keys(e.errors).length) e.setErrors(null);}// value not equal and reverse// 若值不相等且reverse的值为true,则把异常信息添加到比对的目标控件上if (e && v !== e.value && this.isReverse) { e.setErrors({ validateEqual: false });}return null;}
}

以上代码运行后,成功解决了我们的问题。其实解决该问题还有其它的方案,我们可以基于 passwordconfirmPassword 来创建 FormGroup 对象,然后添加自定义验证来实现上述的功能。详细的信息,请参考 - Angular 4.x 基于AbstractControl自定义表单验证。

参考资源

  • scotch.io - How to Implement a Custom Validator Directive (Confirm Password) in Angular 2

  • Thoughtram.io - CUSTOM VALIDATORS IN ANGULAR

  • stack overflow - Angular 2 form validating for repeat password

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Angular JS验证

    常用的表单验证指令 1. 必填项验证 某个表单输入是否已填写&#xff0c;只要在输入字段元素上添加HTML5标记required即可&#xff1a; <input type"text" required /> 2. 最小长度验证表单输入的文本长度是否大于某个最小值&#xff0c;在输入字段上使用指令n…...

    2024/3/23 19:05:38
  2. Angular2 指令

    1. 指令说明 Angular2 指令是构成Angular2应用程序的重要组成部分&#xff0c;指令主要用来对模板的标签或者元素附加一些新的特性或者功能&#xff0c;改变一个 DOM 元素的外观或行为&#xff0c;Angular2指令和组件十分类似&#xff0c;也有由模块&#xff0c;注解&#xff0…...

    2024/3/23 19:05:36
  3. 简单的angular表单验证指令

    <html ng-app"myApp"><head><meta charset"UTF-8"><title>test表单验证</title><script type"text/javascript" src"lib/angular/angular.js"></script><script type"text/javascr…...

    2024/3/28 16:44:08
  4. angular表单验证及 提交功能实现

    本例通过Angular框架来实现简单的表单验证 一、html结构 1、借助于bootstrap快速的编写了一个简单的表单 代码主要部分如下&#xff1a; <div class"container" style"margin-top: 30px;" ng-controller"myCtrl"><h1 style"text…...

    2024/3/23 19:05:37
  5. 表单常用的angular指令

    ng-model 指令根据表单域的状态添加/移除以下类&#xff1a; 1.input为为空的时候ng-empty 2.input不为空的时候ng-not-empty 3.控件已失去焦点ng-touched 4.控件未失去焦点的时候ng-untouched 5.验证通过ng-valid 6.验证失败ng-invalid 7.控件输入值已变更ng-dirty 8.ng-prist…...

    2024/3/23 19:05:36
  6. angular在线验证用户名是否唯一 指令

    <input name"username" type"text" class"form-control" id"username" placeholder"用户名" ensure-unique"username" required ng-model"info.username">.directive(ensureUnique, function($ht…...

    2024/3/23 19:05:33
  7. angular表单密码验证自定义指令

    html <form name"form"><input type"password" name"password" ng-model"password" required placeholder"请输入密码"><input type"password" name"passwordConfirm" ng-model"pa…...

    2024/3/28 3:22:50
  8. 【Angular2】搭建开发环境

    一、前言 随着前端工程化的浪潮到来&#xff0c;最近公司的新项目需要使用Angular2作为前端的开发语言。当然小编之前是没有接触的&#xff0c;而且Angular2也是在AngularJs的基础上发展出来的。但是官网说他们相同的地方不多&#xff0c;事实证明确实不多。但是经过小编几个月…...

    2024/3/23 19:17:39
  9. Angular 开发环境配置方式

    配置开发环境 本快速入门教程&#xff0c;选用第一种配置方式搭建 Angular 开发环境&#xff1a; 基于 Angular Quickstart 使用 Git 克隆 quickstart 项目 git clone https://github.com/angular/quickstart ng4-quickstart 使用 IDE 打开已新建的项目 (本教程使用的 IDE 是 V…...

    2024/3/23 19:17:38
  10. Angular开发环境搭建和项目创建以及启动

    工具的安装 首先需要安装node&#xff0c;直接在官网下载node&#xff0c;然后一直下一步安装完即可&#xff0c;在安装node的时候自带了npm包管理工具 然后安装Angular CLI&#xff0c;使用npm命令安装输入以下命令 npm install -g angular/cli 使用ng -v 查看版本是多少&…...

    2024/3/23 19:17:37
  11. angular开发环境搭建及新建项目

    开发环境搭建 1.安装node和npm(其实只需要安装node&#xff0c;因为npm会跟随node一起安装) 首先百度node.js ,进入node.js的官网&#xff1a; 如图所示&#xff0c;安装LTS版本的&#xff0c;LTS表示当前最稳定使用最广泛的版本的&#xff0c;Current表示最新版本的&#xff…...

    2024/3/23 19:17:38
  12. 【Angular入门】搭建开发环境

    前言 Angular是一个JavaScript框架。它是一个以JavaScript编写的库。可以通过< script>标签添加到HTML页面。 Angular是基于node.js的&#xff0c;如果你的电脑中没有Node.js和npm&#xff0c;请先安装。下载地址&#xff1a;Node.js npm安装插件是从国外服务器…...

    2024/3/23 19:17:35
  13. 2-3 Angular开发环境搭建

    安装NodeJS、Angular CLI、WebStorm使用Angular CLI创建并运行Angular项目分析Angular项目的目录结构及Angular CLI生成的基础代码# npm install -g angular/cli // 安装 # ng -v // 检查安装结果# ng new 项目名 …...

    2024/3/23 19:17:35
  14. Angular 学习(一):Angular 开发环境准备与搭建

    文章目录开发环境准备搭建 Angular CLIAngular 项目创建Angular 项目打包开发环境准备 安装 NodeJs Angular 需要 Node.js 的 8.x 或 10.x 版本。 下载地址&#xff1a; https://nodejs.org/dist/v10.15.3/node-v10.15.3-x64.msi 安装 Python 在安装 Python 时&#xff0c…...

    2024/3/23 19:17:33
  15. 前端Angular开发环境搭建

    准备工作&#xff1a; 1.下载软件&#xff1a; &#xff08;1&#xff09;nodejs--下载地址&#xff1a;https://nodejs.org/en/。 { 检测安装结果命令:npm -v } &#xff08;2&#xff09;webstrom--下载官网&#xff1a;https://www.jetbrains.com/webstorm/。 { 有汉化包 …...

    2024/3/23 19:17:33
  16. angular开发第一步:Mac安装angular cli+ant design环境

    Mac安装angular cli ant design组件库教程nodenpm安装angular脚手架安装ant design组件库引入nodenpm安装 首先使用node -v命令查看mac是否已安装node与npm node -v npm -v假如没有安装可以去官网安装&#xff0c;可以根据以下教程 链接: https://blog.csdn.net/u012982629/…...

    2024/3/23 19:17:31
  17. node下搭建Angular开发环境

    1.安装node.js 可以直接去官网https://nodejs.org/en/ 下载 在cmd 中敲入 npm –v查看版本号看是否安装成功 2.安装淘宝镜像 npm install -g cnpm --registryhttps://registry.npm.taobao.org 3.安装Angular Cli cnpm install -g angular/clilatest 安装完成后输入 ng help…...

    2024/3/23 19:17:30
  18. Delphi程序运行在64位机器连接ODBC的问题

    用的HP手提电脑,g6,64位的,装的是Win7 64位操作系统,Delphi 7.0,32位编译环境。Delphi程序运行在64位机器上用ODBC连接数据库,如果使用系统默认的ODBC管理器设置DSN,则在程序连接数据库时会报"数据源找不到名称和指定的默认驱动程序"的错误,面板上没有MySQL驱…...

    2024/3/23 19:17:30
  19. ionic3+angular开发环境

    1. jdk 安装环境变量 附件中有64位安装包&#xff0c;安装之后配置环境变量 添加JAVA_HOME为jdk安装路径D:\Program Files\Java\jdk1.7.0_51 添加CLASSPATH为%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar Path后追加;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 检…...

    2024/3/24 7:00:55
  20. linux rsync 使用说明

    Rsync是一款通过网络备份重要数据的工具/软件。它同样是一个在类Unix和Window系统上通过网络在系统间同步文件夹和文件的网络协议。Rsync可以复制或者显示目录并复制文件。Rsync默认监听TCP 873端口,通过远程shell如rsh和ssh复制文件。Rsync必须在远程和本地系统上都安装。rsy…...

    2024/3/23 19:17:28

最新文章

  1. vue 列表渲染

    v-for​ 我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名&#xff1a; const items ref([{ message: Foo }, { message: Bar }]) <l…...

    2024/3/29 18:07:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 无人机采集图像的相关知识

    1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计&#xff0c;软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件&#xff0c;可以适用大多数无人机系统。 2.图…...

    2024/3/28 9:51:21
  4. 计算机软件安全

    一、软件安全涉及的范围 1.1软件本身的安全保密 软件的本质与特征&#xff1a; 可移植性 寄生性 再生性 可激发性 攻击性 破坏性 …… 知识产权与软件盗版 软件商品交易形式不透明&#xff0c;方式多样&#xff0c;传统商标标识方法不适用&#xff1b; 盗版方法简捷…...

    2024/3/29 9:02:46
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/29 18:07:15
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/29 18:06:57
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/29 17:27:19
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/29 18:06:36
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/29 18:06:22
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/29 18:06:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57