组件和变化检测器

如你所知,Angular 2 应用程序是一颗组件树,而每个组件都有自己的变化检测器,这意味着应用程序也是一颗变化检测器树。顺便说一句,你可能会想。是由谁来生成变化检测器?这是个好问题,它们是由代码生成。 Angular 2 编译器为每个组件自动创建变化检测器,而且最终生成的这些代码 JavaScript VM友好代码。这也是为什么新的变化检测是快速的 (相比于 Angular 1.x 的 $digest)。基本上,每个组件可以在几毫秒内执行数万次检测。因此你的应用程序可以快速执行,而无需调整性能。

另外在 Angular 2 中,任何数据都是从顶部往底部流动,即单向数据流。下图是 Angular 1.x 与 Angular 2 变化检测的对比图:

让我们来看一下具体例子:

child.component.ts

import { Component, Input } from '@angular/core';@Component({selector: 'exe-child',template: `<p>{{ text }}</p>`
})
export class ChildComponent { @Input() text: string; }

parent.component.ts

import { Component, Input } from '@angular/core';@Component({selector: 'exe-parent',template: `<exe-child [text]="name"></exe-child> `
})
export class ParentComponent { name: string = 'Semlinker'; }

app.component.ts

import { Component } from '@angular/core';@Component({selector: 'exe-app', template: ` <exe-parent></exe-parent> ` }) export class AppComponent{ }

变化检测总是从根组件开始。上面的例子中,ParentComponent 组件会比 ChildComponent 组件更早执行变化检测。因此在执行变化检测时 ParentComponent 组件中的 name 属性,会传递到 ChildComponent 组件的输入属性 text 中。此时 ChildComponent 组件检测到 text 属性发生变化,因此组件内的 p 元素内的文本值从空字符串 变成 'Semlinker' 。这虽然很简单,但很重要。另外对于单次变化检测,每个组件只检查一次。

OnChanges

当组件的任何输入属性发生变化的时候,我们可以通过组件生命周期提供的钩子 ngOnChanges来捕获变化的内容。具体示例如下: 

import { Component, Input, OnChanges, SimpleChange } from '@angular/core';@Component({selector: 'exe-child',template: `<p>{{ text }}</p>`
})
export class ChildComponent implements OnChanges{@Input() text: string;ngOnChanges(changes: {[propName: string]: SimpleChange}) {console.dir(changes['text']);    }
}

以上代码运行后,控制台的输出结果:

我们看到当输入属性变化的时候,我们可以通过组件提供的生命周期钩子 ngOnChanges 捕获到变化的内容,即 changes 对象,该对象的内部结构是 key-value 键值对的形式,其中 key 是输入属性的值,value 是一个 SimpleChange 对象,该对象内包含了 previousValue (之前的值) 和 currentValue (当前值)。 

需要注意的是,如果在组件内手动改变输入属性的值,ngOnChanges 钩子是不会触发的。具体示例如下:

import { Component, Input, OnChanges, SimpleChange } from '@angular/core';@Component({selector: 'exe-child',template: `<p>{{ text }}</p><button (click)="changeTextProp()">改变Text属性</button>`
})
export class ChildComponent implements OnChanges {@Input() text: string;ngOnChanges(changes: { [propName: string]: SimpleChange }) {console.dir(changes['text']);}changeTextProp() {this.text = 'Text属性已改变'; } }

当你点击 '改变Text属性' 的按钮时,发现页面中 p 元素的内容会从 'Semlinker' 更新为 'Text属性已改变' ,但控制台却没有输出任何信息,这验证了我们刚才给出的结论,即在组件内手动改变输入属性的值,ngOnChanges 钩子是不会触发的。

变化检测性能优化

在介绍如何优化变化检测的性能前,我们先来看几张图:

变化检测前:

变化检测时:

我们发现每次变化检测都是从根组件开始,从上往下执行。虽然 Angular 2 优化后的变化检测执行的速度很快,但我们能否只针对那些有变化的组件才执行变化检测或灵活地控制变化检测的时机呢 ? 答案是有的,接下来我们看一下具体怎么进行优化。

变化检测策略

在 Angular 2 中我们可以在定义组件的 metadata 信息时,设定每个组件的变化检测策略。接下来我们来看一下具体示例:

profile-name.component.ts

import { Component, Input} from '@angular/core';@Component({selector: 'profile-name',template: `<p>Name: {{name}}</p>`
})
export class ProfileNameComponent { @Input() name: string; }

profile-age.component.ts

import { Component, Input } from '@angular/core';@Component({selector: 'profile-age',template: `<p>Age: {{age}}</p>`
})
export class ProfileAgeComponent { @Input() age: number; }

profile-card.component.ts

import { Component, Input } from '@angular/core';@Component({selector: 'profile-card',template: `<div><profile-name [name]='profile.name'></profile-name> <profile-age [age]='profile.age'></profile-age> </div> ` }) export class ProfileCardComponent { @Input() profile: { name: string; age: number }; }

app.component.ts

import { Component } from '@angular/core';@Component({selector: 'exe-app',template: `<profile-card [profile]='profile'></profile-card>`
})
export class AppComponent {profile: { name: string; age: number } = {name: 'Semlinker',age: 31 }; }

上面代码中 ProfileCardComponent 组件,有一个 profile 输入属性,而且它的模板视图只依赖于该属性。如果使用默认的检测策略,每当发生变化时,都会从根组件开始,从上往下在每个组件上执行变化检测。但如果 ProfileCardComponent 中的 profile 输入属性没有发生变化,是没有必要再执行变化检测。针对这种情况,Angular 2 为我们提供了 OnPush 的检测策略。 

OnPush策略

import { Component, Input, ChangeDetectionStrategy } from '@angular/core';@Component({selector: 'profile-card',template: `<div><profile-name [name]='profile.name'></profile-name> <profile-age [age]='profile.age'></profile-age> </div> `, changeDetection: ChangeDetectionStrategy.OnPush }) export class ProfileCardComponent { @Input() profile: { name: string; age: number }; }

当使用 OnPush 策略的时候,若输入属性没有发生变化,组件的变化检测将会被跳过,如下图所示:

实践是检验真理的唯一标准,我们马上来个例子:

app.component.ts

import { Component, OnInit } from '@angular/core';@Component({selector: 'exe-app',template: `<profile-card [profile]='profile'></profile-card>`
})
export class AppComponent implements OnInit{ profile: { name: string; age: number } = { name: 'Semlinker', age: 31 }; ngOnInit() { setTimeout(() => { this.profile.name = 'Fer'; }, 2000); } }

以上代码运行后,浏览器的输出结果:

我们发现虽然在 AppComponent 组件中 profile 对象中的 name 属性已经被改变了,但页面中名字的内容却未同步刷新。在进一步分析之前,我们先来介绍一下 Mutable 和 Immutable 的概念。

Mutable(可变) and Immutable(不可变)

在 JavaScript 中默认所有的对象都是可变的,即我们可以任意修改对象内的属性:

var person = {name: 'semlinker',age: 31
};
person.name = 'fer'; 
console.log(person.name); // Ouput: 'fer'

上面代码中我们先创建一个 person 对象,然后修改 person 对象的 name 属性,最终输出修改后的 name 属性。接下来我们调整一下上面的代码,调整后的代码如下:

var person = {name: 'semlinker',age: 31 }; var aliasPerson = person; person.name = 'fer'; console.log(aliasPerson === person); // Output: true

在修改 person 对象前,我们先把 person 对象赋值给 aliasPerson 变量,在修改完 person 对象的属性之后,我们使用 === 比较 aliasPerson 与 person,发现输出的结果是 true。也许你已经知道了,我们刚才在 AppComponent 中模型更新了,但视图却未同步更新的原因。 

接下来我们来介绍一下 Immutable : 

Immutable 即不可变,表示当数据模型发生变化的时候,我们不会修改原有的数据模型,而是创建一个新的数据模型。具体示例如下:

var person = {name: 'semlinker',age: 31 }; var newPerson = Object.assign({}, person, {name: 'fer'}); console.log(person.name, newPerson.name); // Output: 'semliker' 'fer' console.log(newPerson === person); // Output: false

这次要修改 person 对象中的 name 属性,我们不是直接修改原有对象,而是使用 Object.assign 方法创建一个新的对象。介绍完 Mutable 和 Immutable 的概念 ,我们回过头来分析一下 OnPush 策略,该策略内部使用 looseIdentical 函数来进行对象的比较,looseIdentical 的实现如下: 

export function looseIdentical(a: any, b: any): boolean { return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); }

因此当我们使用 OnPush 策略时,需要使用的 Immutable 的数据结构,才能保证程序正常运行。为了提高变化检测的性能,我们应该尽可能在组件中使用 OnPush 策略,为此我们组件中所需的数据,应仅依赖于输入属性。

OnPush 策略是提高应用程序性能的一个简单而好用的方法。不过,我们还有其他方法来获得更好的性能。 即使用 Observable 与 ChangeDetectorRef 对象提供的 API,来手动控制组件的变化检测行为。

ChangeDetectorRef

ChangeDetectorRef 是组件的变化检测器的引用,我们可以在组件中的通过依赖注入的方式来获取该对象:

import { ChangeDetectorRef } from '@angular/core';@Component({}) class MyComponent { constructor(private cdRef: ChangeDetectorRef) {} }

ChangeDetectorRef 变化检测类中主要方法有以下几个:

export abstract class ChangeDetectorRef {abstract markForCheck(): void; abstract detach(): void; abstract detectChanges(): void; abstract reattach(): void; }

其中各个方法的功能介绍如下:

  • markForCheck() - 在组件的 metadata 中如果设置了 changeDetection: ChangeDetectionStrategy.OnPush 条件,那么变化检测不会再次执行,除非手动调用该方法。 

  • detach() - 从变化检测树中分离变化检测器,该组件的变化检测器将不再执行变化检测,除非手动调用 reattach() 方法。

  • reattach() - 重新添加已分离的变化检测器,使得该组件及其子组件都能执行变化检测

  • detectChanges() - 从该组件到各个子组件执行一次变化检测

接下来我们先来看一下 markForCheck() 方法的使用示例: 

child.component.ts

import { Component, Input, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';@Component({selector: 'exe-child',template: `<p>当前值: {{ counter }}</p>`,changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChildComponent implements OnInit { @Input() counter: number = 0; constructor(private cdRef: ChangeDetectorRef) {} ngOnInit() { setInterval(() => { this.counter++; this.cdRef.markForCheck(); }, 1000); } }

parent.component.ts

import { Component, ChangeDetectionStrategy } from '@angular/core';@Component({selector: 'exe-parent', template: ` <exe-child></exe-child> `, changeDetection: ChangeDetectionStrategy.OnPush }) export class ParentComponent { }

ChildComponent 组件设置的变化检测策略是 OnPush 策略,此外该组件也没有任何输入属性。那么我们应该怎么执行变化检测呢 ?我们看到在 ngOnInit 钩子中,我们通过 setInterval 定时器,每隔一秒钟更新计数值同时调用 ChangeDetectorRef 对象上的 markForCheck() 方法,来标识该组件在下一个变化检测周期,需执行变化检测,从而更新视图。

接下来我们来讲一下 detach() 和 reattach() 方法,它们用来开启/关闭组件的变化检测。让我们看下面的例子:

child.component.ts

import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';@Component({selector: 'exe-child',template: `Detach: <input type="checkbox" (change)="detachCD($event.target.checked)"> <p>当前值: {{ counter }}</p> ` }) export class ChildComponent implements OnInit { counter: number = 0; constructor(private cdRef: ChangeDetectorRef) { } ngOnInit() { setInterval(() => { this.counter++; }, 1000); } detachCD(checked: boolean) { if (checked) { this.cdRef.detach(); } else { this.cdRef.reattach(); } } }

该组件有一个用于移除或添加变化检测器的复选框。 当复选框被选中时,detach() 方法将被调用,之后组件及其子组件将不会被检查。当取消选择时,reattach() 方法会被调用,该组件将会被重新添加到变化检测器树上。

Observables

使用 Observables 机制提升性能和不可变的对象类似,但当发生变化的时候,Observables 不会创建新的模型,但我们可以通过订阅 Observables 对象,在变化发生之后,进行视图更新。使用 Observables 机制的时候,我们同样需要设置组件的变化检测策略为 OnPush。我们马上看个例子:

counter.component.ts

import { Component, Input, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { Observable } from 'rxjs/Rx';@Component({selector: 'exe-counter', template: ` <p>当前值: {{ counter }}</p> `, changeDetection: ChangeDetectionStrategy.OnPush }) export class CounterComponent implements OnInit { counter: number = 0; @Input() addStream: Observable<any>; constructor(private cdRef: ChangeDetectorRef) { } ngOnInit() { this.addStream.subscribe(() => { this.counter++; this.cdRef.markForCheck(); }); } }

app.component.ts

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Rx';@Component({selector: 'exe-app', template: ` <exe-counter [addStream]='counterStream'></exe-counter> ` }) export class AppComponent implements OnInit { counterStream: Observable<any>; ngOnInit() { this.counterStream = Observable.timer(0, 1000); } }

现在我们来总结一下变化检测的原理:Angular 应用是一个响应系统,变化检测总是从根组件到子组件这样一个从上到下的顺序开始执行,它是一棵线性的有向树,默认情况下,变化检测系统将会走遍整棵树,但我们可以使用 OnPush 变化检测策略,在结合 Observables 对象,进而利用 ChangeDetectorRef 实例提供的方法,来实现局部的变化检测,最终提高系统的整体性能。

我有话说

1.ChangeDetectionStrategy 变化检测策略总共有几种 ?

export declare enum ChangeDetectionStrategy {OnPush = 0, // 变化检测器的状态值是 CheckOnceDefault = 1, // 组件默认值 - 变化检测器的状态值是 CheckAlways,即始终执行变化检测 }

2.变化检测器的状态有哪几种 ?

export declare enum ChangeDetectorStatus {CheckOnce = 0, // 表示在执行detectChanges之后,变化检测器的状态将会变成CheckedChecked = 1, // 表示变化检测将被跳过,直到变化检测器的状态恢复成CheckOnce CheckAlways = 2, // 表示在执行detectChanges之后,变化检测器的状态始终为CheckAlways Detached = 3, // 表示该变化检测器树已从根变化检测器树中移除,变化检测将会被跳过 Errored = 4, // 表示在执行变化检测时出现异常 Destroyed = 5, // 表示变化检测器已被销毁 }


原文地址:http://www.tuicool.com/articles/UBBzQzA

转载于:https://www.cnblogs.com/shitoupi/p/6731575.html

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

相关文章

  1. angular1脏值监测 模拟实现

    /* * */function Scope(){this.$$watchers []; } //valueEq为真时&#xff0c;基于值的检查开启。 Scope.prototype.$watch function(watchFn, listenerFn, valueEq){var watcher {watchFn: watchFn,listenerFn: listenerFn || function() {},valueEq: !!valueEq};this.$$wa…...

    2024/5/7 14:54:28
  2. 39.1Elastic Stack笔记

    搜索引擎:索引组件:获取数据-->建立文档-->文档分析-->文档索引(倒排索引)搜索组件:用户搜索接口-->建立查询(将用户键入的信息转换为可处理的查询对象)-->搜索查询-->展现结果索引组件:Lucene搜索组件:Solr, ElasticSearch Lucene Core:Apache…...

    2024/5/7 19:37:47
  3. Angular进阶知识回顾

    一.注解 1.什么是装饰器&#xff08;注解&#xff09; 装饰器(注解)就是一个函数&#xff0c;但它是一个返回函数的函数如果注解需要传递参数&#xff0c;则在声明注解的时候获取参数并使用即可它是TypeScript的特性&#xff0c;而不是Angular的特性 2.自定义无参数注解 定义…...

    2024/5/8 2:58:43
  4. Angular动态创建组件

    Angular动态创建组件 什么是动态创建? 一般来说就是组件不需要在html内定义,而是通过typescript来控制该组件的创建。往往我们大部分的时候都是在html内定义,之所以这样也能够创建出我们想要的组件,这是因为Angular框架在编译后或运行时会帮助我们创建这个组件并生成相应…...

    2024/5/8 3:19:32
  5. 脏值检测

    以前用jquery对页面中的表单元素做验证 绑定事件&#xff08;表单元素&#xff09;focus,blur,keydown,keyup,change,click 等等 在事件回调函数中获取需要验证的表单 对表单内容做验证处理&#xff08;正则&#xff09; 根据结果显隐提示 提交表单时候我们还会对数据进行拼接&…...

    2024/5/7 18:39:51
  6. Angular 变更检测及单向数据流

    本文学习总结于 太狼 关于“angular2中数据状态管理方案有哪些&#xff1f;”的回答Angular 2 Change Detection - 2Angular - What is Unidirectional Data Flow ? Learn How the Angular Development Mode Works, why its important to use it and how to Troubleshoot it数…...

    2024/5/7 5:29:04
  7. Angular变化检测机制:改善的脏检查

    前端展示的页面是由视图和数据共同构成的&#xff0c;视图模板定义了页面的框架&#xff0c;而数据定义了页面具体的显示内容。而数据发生变化的时候&#xff0c;我们需要及时将变化的内容更新到视图中&#xff0c;否则用户看到的数据就是不正确的。系统及时感知到数据模型的变…...

    2024/4/21 4:01:10
  8. angular 触发‘脏值’检查的几种情况

    2019独角兽企业重金招聘Python工程师标准>>> DOM事件&#xff0c;譬如用户输入文本&#xff0c;点击按钮等。(ng-click)XHR响应事件 ($http)浏览器Location变更事件 ($location)Timer事件($timeout, $interval)执行$digest()或$apply()转载于:https://my.oschina.ne…...

    2024/4/21 4:01:10
  9. Angular的变更检测

    angular变更检测分为默认的&#xff08;“CheckAlways”&#xff09;变更检测策略 和 OnPush&#xff08;“CheckOnce”&#xff09;变更检测策略&#xff0c;angular变更检测是一种单向数据流&#xff0c;也就是检测永远是从父组件到子组件的&#xff0c;如果在一次变更周期内…...

    2024/4/21 4:01:09
  10. angular——数据操作 及 管道

    <!-- 数据绑定 --> <div [title]title>{{content}} </div><!-- 解析绑定 html 标签 --> content: string <h1>我是 html</h1> <div [innerHtml]content></div><!-- 循环遍历数组 --> <div *ngFor"let item of …...

    2024/5/7 17:48:54
  11. angular 模板循环ng-container

    angular2 在组件模板中可以循环数组集合等对象,语法非常简单,如: <ng-container *ngFor"let item of model.list"> <div class"sermons-post">{{item.name}}</div> </ng-container>ng2 结构指令不能直接嵌套使用,可使用<ng-co…...

    2024/5/7 13:42:46
  12. 前端讲义57_AngularJS数组循环

    ng-repeat 指令会重复一个 HTML 元素&#xff0c;对于集合中&#xff08;数组中&#xff09;的每项会克隆一次HTML元素。效果如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>AngularJS循环取出数组值&…...

    2024/5/8 9:02:45
  13. 【Angular2】遍历嵌套实体生成数组

    前言 需要根据实体生成一个数组&#xff0c;存放初始数据 实体是ExamPaperModel&#xff08;试卷&#xff09;&#xff0c;其中一个属性为QuestionTypeList&#xff0c;包含的是实体QuestionTypeModel&#xff08;题型&#xff09;&#xff0c;题型实体中有一个属性为Questio…...

    2024/5/7 14:19:08
  14. Vue与React和Angular的区别(书籍摘要:待继续更新)

    Vue会自动通过状态生成DOM&#xff0c;并将其输出到页面上显示出来&#xff0c;这个过程叫渲染。Vue的渲染过程是声明式的&#xff0c;我们通过模板&#xff08;template&#xff09;来描述状态与DOM之间的映射关系。 通常&#xff0c;在运行时应用内部的状态会不断发生变化&a…...

    2024/5/2 11:46:55
  15. 使用MapReduce实现Bayes算法

    代码如下: NBayes.conf 4 cl1 cl2 cl3 cl4 3 p1 12 p2 16 p3 17 NBayes.train cl1 5 6 7 cl2 3 8 4 cl1 2 5 2 cl3 7 8 7 cl4 3 8 2 cl4 9 2 7 cl2 1 8 5 cl5 2 9 4 cl3 10 3 4 cl1 4 5 6 cl3 4 6 7 NBayes.test 1 5 6 7 2 1 8 5 3 2 9 4 4 10 3 4 5 4 5 6 6 3 8 4 7 2 5 2 8 …...

    2024/4/21 4:01:03
  16. 在angular中使用假数据(mock)

    前端有时候多个页面需要相同的数据&#xff0c;如果在ts文件里面写大量假数据&#xff0c;很长也容易混乱&#xff0c;用mock就会方便很多&#xff0c; 1、首先安装mock yarn add delon/mock -D2、在app.module.ts文件的 imports:[ ] 中添加(第一步完成以后&#xff0c;系统会…...

    2024/4/21 4:01:01
  17. angular数据绑定与监控(学习笔记)

    数据的双向绑定 angular实现了双向绑定机制,所谓双向绑定,就是从界面的操作能实时反映到数据,数据的变更能实时展现到界面.基于单一模型的界面同步 ng-model 指令:可以将输入域的值与 AngularJS 创建的变量绑定。 <!DOCTYPE html><html><head><meta chars…...

    2024/4/21 4:01:01
  18. angular2+中数据变更子组件页面未更新

    引入监测 import {ChangeDetectorRef} from angular/core; constructor( private changeDetectorRef:ChangeDetectorRef ){} 转载于:https://www.cnblogs.com/ckAng/p/8574207.html...

    2024/4/21 4:01:00
  19. Angular数据可视化项目总结1

    在实习&#xff0c;用Angular做一个数据可视化的项目&#xff0c;总结一下。 1 怎么使用Echart npm install echarts -S npm install ngx-echarts -S npm install types/echarts -D 例子&#xff1a; // active-line.component.ts import { Component, OnInit } from angul…...

    2024/5/4 11:24:54
  20. angular判断数据类型

    angular.isArray 判断括号内的值是否为数组。 格式&#xff1a;angular.isArray(value); value: 被判断是否为数组的值。 --------------------------------------------------------------- angular.isDate 判断括号内的值是否是一个时间。 格式&#xff1a;angular.isDate(va…...

    2024/5/1 4:09:39

最新文章

  1. 《Linux运维总结:ARM架构CPU基于docker-compose一离线部署consul v1.18.1集群工具》

    总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…...

    2024/5/8 11:08:55
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/5/7 10:36:02
  3. 自动化运维(十)Ansible 之进程管理模块

    Ansible的进程管理模块提供了一种强大而灵活的方式来管理和操作各种进程管理器和服务。无论你使用的是Supervisor、Systemd、传统的init脚本还是Runit,这些模块都可以帮助你轻松地管理服务的生命周期。通过合理地使用这些模块,你可以实现服务的自动化管理,提高系统的可靠性和稳…...

    2024/4/30 2:02:50
  4. 自我介绍的HTML 页面(入门)

    一.前情提要 1.主要是代码示例&#xff0c;具体内容需自己填充 2.代码后是详解 二.代码实例和解析 代码 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>自我介绍页面</title>…...

    2024/5/5 7:22:10
  5. Oracle 正则表达式

    一、Oracle 正则表达式相关函数 (1) regexp_like &#xff1a;同 like 功能相似&#xff08;模糊 匹配&#xff09; (2) regexp_instr &#xff1a;同 instr 功能相似&#xff08;返回字符所在 下标&#xff09; (3) regexp_substr &#xff1a; 同 substr 功能相似&…...

    2024/5/7 4:19:23
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/8 6:01:22
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/5/7 14:25:14
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

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

    2022/11/19 21:17:18
  27. 错误使用 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,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
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  45. 如何在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