谈谈数据监听observable的实现
一、概述
数据监听实现上就是当数据变化时会通知我们的监听器去更新所有的订阅处理,如:
var vm = new Observer({a:{b:{x:1,y:2}}});
vm.watch('a.b.x',function(newVal,oldVal){console.log(arguments);
});
vm.a.b.x = 11; //触发watcher执行 输出 11 1
数据监听是对观察者模式的实现,也是MVVM中的核心功能。这个功能我们在很多场景中都可以用到,可以大大的简化我们的代码。
二、现有MVVM框架中的Observable是怎么实现的
先看看各MVVM框架对Observable是怎么实现的,我们分析下它们的实现原理,常见的MVVM框架有以下几种:
1、knockout,老牌的MVVM实现
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
var ViewModel = function(first, last) {this.firstName = ko.observable(first);this.lastName = ko.observable(last);this.fullName = ko.pureComputed(function() {return this.firstName() + " " + this.lastName();}, this);
};ko.applyBindings(new ViewModel("Planet", "Earth"));
早期微软是把每个属性转换成一个observable函数,通过函数对该属性进行取值赋值来实现的,缺点是改变了原属性,不能够像属性一样取值赋值。
2、avalon,国产框架特点是兼容IE6+
<div ms-controller="box"><div style=" background: #a9ea00;" ms-css-width="w" ms-css-height="h" ms-click="click"></div><p>{{ w }} x {{ h }}</p><p>W: <input type="text" ms-duplex="w" data-duplex-event="change"/></p><p>H: <input type="text" ms-duplex="h" /></p>
</div>
var vm = avalon.define({$id: "box",w: 100,h: 100,click: function() {vm.w = parseFloat(vm.w) + 10;vm.h = parseFloat(vm.h) + 10;}
});
avalon.scan()
avalon对数据监听堪称司徒的黑魔法,IE9+时利用ES5的defineProperty/defineProperties去实现,当IE不支持此方法时利用vbscript来实现。缺点是vbs定义后的对象不能够动态增删属性。
3、angular,大而全的mvvm解决方案
<div ng-app="myApp" ng-controller="myCtrl">
名: <input type="text" ng-model="firstName"><br>
姓: <input type="text" ng-model="lastName"><br>
<br>
姓名: {{firstName + " " + lastName}}
</div>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {$scope.firstName = "John";$scope.lastName = "Doe";
});
ng对数据监听的实现,采用了AOP的编程思维,它对常用的dom事件xhr事件等进行封装,当这些事件被触发发,封装的方法中有去调用ng的digest流程,在此流程去检测数据变化并通知所有订阅,所以我们导致使用原生的setTimeout代替$timeout
后需要自已去执行执行$digest()
或$apply()
,缺点是需要对使用到的所有外部事件进行封装。
4、vue,现代小巧优雅(实际上是比avalon大一些)
<div id="demo"><p>{{message}}</p><input v-model="message">
</div>
var demo = new Vue({el: '#demo',data: {message: 'Hello Vue.js!'}
})
vue对数据监听的实现就比较单一了,因为它只支持IE9+,利用Object.defineProperty一招搞定。缺点是不兼容低版本IE。
三、Observable的实现有哪些方法及思路
通过上面几个框架对比我们可以看出几种不同数据监听的实现方法,实际上还有很多的方式可以去实现的:
1、把属性转换为函数(knockout
)
2、IE9+使用defineProperty/defineProperties
(vue
、avalon
)
3、低版本IE使用VBS(avalon
)
4、数据检测,对各事件进行封装,在封装的方法中调用digest(angular
)
5、利用__defineGetter__/__defineSetter__
方法(avalon
)
6、把数据转换成dom对象利用IE8 dom对象的defineProperty
方法或onpropertychange
事件
7、利用Object.observe
方法
8、利用ES6的Proxy
对象
9、利用setInterval
进行脏检测
那么我们就具体看下这些数据监听实现:
1、利用函数转换如ko.observable(),兼容所有
function observable(val){return function(newVal){if (arguments.length > 0){val = newVal;notifyChanges();}else{return val;}}
}
var data = {};
var data.a = observable(1);
var value = data.a() //取值
data.a(2); //赋值
2、利用defineProperty/defineProperties,兼容性IE9+
function defineReactive(obj, key, val){Object.defineProperty(obj, key, {enumerable: true,configurable: true,get: function reactiveGetter() {return val;},set: function reactiveSetter(newVal) {val = newVal;notifyChanges();}});
}
3、利用__defineGetter__/__defineSetter__
,兼容性一些mozilla内核的浏览器
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__
function defineReactive(obj, key, val){obj.__defineGetter__(key, function() {return val;});obj.__defineSetter__(key, function(newVal) {val = newVal;notifyChanges();});
}
4、利用vbs,兼容性低版本的IE浏览器,IE11 edge不再支持(avalon
)
先window.execScript得到parseVB的方法
Function parseVB(code)ExecuteGlobal(code)
End Function
window.execScript(parseVB_Code);
然后处理好数据属性properties生成get/set方法放在accessors,并把notifyChanges放到get/set中,然后动态生成以下vbs代码
Class DefinePropertyClassPrivate [__data__], [__proxy__]Public Default Function [__const__](d1, p1)Set [__data__] = d1: set [__proxy__] = p1Set [__const__] = MeEnd FunctionPublic Property Let [bbb](val1)Call [__proxy__](Me,[__data__], "bbb", val1)End PropertyPublic Property Set [bbb](val1)Call [__proxy__](Me,[__data__], "bbb", val1)End PropertyPublic Property Get [bbb]On Error Resume NextSet[bbb] = [__proxy__](Me,[__data__],"bbb")If Err.Number <> 0 Then[bbb] = [__proxy__](Me,[__data__],"bbb")End IfOn Error Goto 0End PropertyPublic Property Let [ccc](val1)Call [__proxy__](Me,[__data__], "ccc", val1)End PropertyPublic Property Set [ccc](val1)Call [__proxy__](Me,[__data__], "ccc", val1)End PropertyPublic Property Get [ccc]On Error Resume NextSet[ccc] = [__proxy__](Me,[__data__],"ccc")If Err.Number <> 0 Then[ccc] = [__proxy__](Me,[__data__],"ccc")End IfOn Error Goto 0End PropertyPublic Property Let [$model](val1)Call [__proxy__](Me,[__data__], "$model", val1)End PropertyPublic Property Set [$model](val1)Call [__proxy__](Me,[__data__], "$model", val1)End PropertyPublic Property Get [$model]On Error Resume NextSet[$model] = [__proxy__](Me,[__data__],"$model")If Err.Number <> 0 Then[$model] = [__proxy__](Me,[__data__],"$model")End IfOn Error Goto 0End PropertyPublic [$id]Public [$render]Public [$track]Public [$element]Public [$watch]Public [$fire]Public [$events]Public [$skipArray]Public [$accessors]Public [$hashcode]Public [$run]Public [$wait]Public [hasOwnProperty]
End ClassFunction DefinePropertyClassFactory(a, b)Dim oSet o = (New DefinePropertyClass)(a, b)Set DefinePropertyClassFactory = o;
End Function
执行以上两段vbs代码得到observable对象
window.parseVB(DefinePropertyClass_code);
window.parseVB(DefinePropertyClassFactory_code);
var vm = window.DefinePropertyClassFactory(accessors, VBMediator);function VBMediator(instance, accessors, name, value) {var accessor = accessors[name]if (arguments.length === 4) {accessor.set.call(instance, value)} else {return accessor.get.call(instance)}
}
5、在事件中触发检测digest,兼容所有(angular
)
以发XMLHttpRequest 为例
var _XMLHttpRequest = window.XMLHttpRequest;window.XMLHttpRequest = function(flags) {var req;req = new _XMLHttpRequest(flags);monitorXHR(req); //处理req绑定触发数据检测及notifyChanges处理return req;};
6、把数据转换成dom节点再利用defineProperty方法或onpropertychange事件,这种极端的办法主要是用来处理IE8的,因为IE8支持defineProperty但只有DOM元素才支持
function data2dom(obj,key,val){if (!obj instanceof HTMLElement){obj = document.createElement('i');}//defineProperty or onpropertychange handledefineProperty(obj,key,val); //内部处理notifyChangesreturn obj;
}
这种方法的成本开销是很大的
7、利用Object.observe,在Chrome 36 beta版本中出现,但很多浏览器还没有支持已从ES7草案中移除
var data = {};
Object.observe(data, function(changes){changes.forEach(function(change) {console.log(change.type, change.name, change.oldValue);});
});
8、利用ES6的Proxy对象,未来的解决方案
https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Proxy
//语法
var p = new Proxy(target, handler);//示例
let setter = {set: function(obj, prop, value) {obj[prop] = value;notifyChanges();}
};let person = new Proxy({}, setter);
person.age = 28; //触发notifyChanges
9、利用脏检测,兼容所有,主要用于没有很好办法的情况下
利用脏检测实现Object.defineProperty方法
function PropertyChecker(obj, key, val, desc) {this.key = key;this.val = val;this.get = function () {var val = desc.get();if (this.val == val) {val = obj[key];if (this.val != val) {desc.set(val);}}return val;};this.set = desc.set;
}
var checkList = [];
Object.defineProperty = function (obj, key, desc) {var val = obj[key] = desc.value != undefined ? desc.value : desc.get();if (desc.get && desc.set) {var property = new PropertyChecker(obj, key, val, desc);checkList.push(property);}
};function loopIE8() {for (var i = 0; i < checkList.length; i++) {var item = checkList[i];var val = item.get();if (item.val != val) {item.val = val;item.set(val);}}
}
setTimeout(function () {setInterval(loopIE8, 200);
}, 1000);
四、监听数组变化
实际上以面说的这些仅仅是对数据对象进行监听,而数据中还包括数组,如:
var data = {a:[1,2,3]};
data.a.push(4);
这种操作也会使数据产生了变化,但是仅对getter setter进行定义是捕捉不到这些变化的。所以我们要单独针对数组做一些observable的处理。
基本思路就是重写数组的这些方法
1、push
2、pop
,
3、shift
4、 unshift
5、splice
6、sort
7、reverse
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);
var arrayKeys = Object.keys(arrayMethods);
['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) {var original = arrayProto[method];def(arrayMethods, method, function mutator() {var i = arguments.length;var args = new Array(i);while (i--) {args[i] = arguments[i];}var result = original.apply(this, args);var inserted;switch (method) {case 'push':inserted = args;break;case 'unshift':inserted = args;break;case 'splice':inserted = args.slice(2);break;}if (inserted) observe(inserted);notifyChanges(); //通知变化return result;});
});
function def(obj, key, val, enumerable) {obj = Object.defineProperty(obj, key, {value: val,enumerable: !!enumerable,writable: true,configurable: true})
}
function protoAugment(target, src) {target.__proto__ = src;
}function copyAugment(target, src, keys) {for (var i = 0, l = keys.length; i < l; i++) {var key = keys[i];def(target, key, src[key]);}
}var _augmentArr = ('__proto__' in {})? protoAugment : copyAugment;
function augmentArr(arr){_augmentArr(arr, arrayMethods, arrayKeys);
};
使用时只需要调用augmentArr(arr)即可实现
五、数据监听存在哪些问题
目前主流的数据监听方案还是defineProperty + augmentArr的方式,已有不少的mvvm框架及一些observable类库,但是还存在一些问题:
1、所有的属性必须预先定义好
var data = new Observer({a:{b:1}});//这里没有定义a.c
data.$watch('a.c',function(newVal,oldVal){console.log(arguments);
});
data.a.c = 1; //此时,监听a.c的watcher是不生效的,因为没有提前定义c属性
2、属性被覆盖后监听失效
var data = new Observer({a:{b:1}});
data.$watch('a.b',function(newVal,oldVal){console.log(arguments);
});
data.a.b = 2; //生效
data.a = {b:3}; //此时b属性的原结构遭破坏,对b的监听失效
3、对数组元素的赋值是不会触发监听器更新的
var data = new Observer({a{c:[1,2,3]}});
data.$watch('a.c',function(newVal,oldVal){console.log(arguments);
});
data.a.c[1] = 22; //不会触发a.c的watcher
这个问题,不少框架中是提供了一个$set方法来赋值,这是个解决问题的办法,但是原生代码赋值仍是不生效的。
def(arrayProto, '$set', function $set(index, val) {if (index >= this.length) {this.length = Number(index) + 1;}return this.splice(index, 1, val)[0];
});
4、删除对象的属性也不会触发监听器更新
var data = new Observer({a:{b:1},c:'xyz'});
data.$watch('a',function(newVal,oldVal){console.log(arguments);
});
delete data.a; //不会触发a的watcher
同数组也可以父节点中定义一个$remove来实现
六、这些问题的解决方案
上述问题中:
1、第1、2其实是属于同一类的问题,就是因为这些notifyChanges直接在defineProperty时定义在属性中,当这个属性未定义或遭破坏时,那么对该属性的监听肯定是要失效的。对于这个问题的解决,我的思路是这样的
function Observer(data){this.data = data;var watches=[];//监听时,先把监听数据保存在该observer实例的watches中this.watch=function(path,subscriber,options){watches.push(new Watcher(path,subscriber,options));};//当publish时把watcher转换为subscriber绑定到对应的属性上this.publish = function(watch){var target = queryProperty(watch.path);var subscriber = new Subscriber(watch,target);target.ob.subscribes.add(subscriber );}
}
每当重新赋新值时,会从根节点拉取watches重新publish,这样的话保证了赋新值时原来的监听数据不会被覆盖。
var ob = new Observer(data);
ob.watch('a.b',function(){console.log(arguments);
});
此watcher信息是保存在根节点的ob对象中,每一个object类型的属性都会对应一个ob对象,这样即使data.a = {b:123}重新赋值导致data.a.b的定义被覆盖,但是根节点并没有被覆盖,在它被得新赋值时我们可以重新调用父节点ob中的publish方法把watcher重新生效,这样的话这个问题就可以解决了。
2、第3个问题,其实很容易解决,比如vue中只需要修改一句代码就可以解决,也许是出于性能还其它的考虑它没有这么去做。即把数组的每个元素当做属性来定义
function observeArr(arr){for (var i = 0, l = arr.length; i < l; i++) {observeProperty(arr, i, arr[i]);}
}
3、第4个问题除了父节点中增加$remove方法我目前也没有想到什么好的办法,如果大家有什么好的想法可以跟我交流下。
七、我对数据监听的实现
既然研究了下这个领域的东西,也就顺便造了个轮子实现了一个数据observable的功能,用法大概如下:
var data = {a:{b:{x:1,y:2}},c:[1,2,3]};
var ob = new Observer(data);
data.$watch('a.b',function(){console.log(arguments);
},{deep:true})
data.a.b.x = 11;
主要是利用了es5的Object.defineProperty + augmentArr来实现的,代码400行左右。
https://github.com/liuhuisheng/actionjs/blob/master/src/observer.js
然后想支持下IE8写了个polifill,用脏检查实现了下
https://github.com/liuhuisheng/actionjs/blob/master/src/polifill.js
一直很懒终于总结了下做个笔记。
转载于:https://www.cnblogs.com/xqin/p/5882466.html
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- angular6 在service中封装http请求,返回Observable 对象
文章目录文章参考问题描述案例文章参考 从Angular6开始入门RxJS6Rxjs 6学习 问题描述 想利用后台的MVC的思想,将向后台请求数据的方法全部放到service中,便于代码的管理发现自己不了解http.post()返回的数据类型,根据Vscode工具提示是Obse…...
2024/4/20 20:01:39 - Angular2 使用 Observables From Other Sources
原文链接:https://angular-2-training-book.rangle.io/handout/observables/using_observables_from_other_sources.html Using Observables From Other Sources In the example above we created Observables from scratch which is especially useful in underst…...
2024/4/28 1:38:52 - Angular的同步:Promise
Angular的同步方法 方式有很多,我记录的是Promise和asyncawait的方法: 1:asyncawait: //测试同步方法,用async和await关键字async callRPATest(){let result await this.generateRPATest();console.log("result:"result);}generateRPATest(){let urlthis.baseURL&…...
2024/4/27 22:40:55 - Angular报错 类型“typeof Observable”上不存在属性“from” 类型observableany上不存在属性debounceTime
在学习Angular过程中,由于按照视频Angular4学习的,代码报错:类型“typeof Observable”上不存在属性“from”,类型observable<any>上不存在属性debounceTime 查资料发现,由于自己环境是Anguar8,&quo…...
2024/4/21 3:45:25 - Angular- 类型observableany上不存在属性debounceTime
问题的解决 在敲angular 的时候出现了这个问题:类型observable<any>上不存在属性debounceTime,也尝试过声明属性,但是也不行,错误更多。 最终找到了原因,是rxjs的版本的问题。 我安装的是angular7,而…...
2024/4/28 14:46:49 - Angular2:Observables Array Operations
原文链接:https://angular-2-training-book.rangle.io/handout/observables/observables_array_operations.html Observables Array OperationsIn addition to simply iterating over an asynchronous collection, we can perform other operations such as filter …...
2024/4/28 7:46:48 - Angular异步变同步处理
1. 背景 在前端项目中,经常会遇到页面有多个接口,后一个接口参数需要从前一个接口的返回数据中获取,这就存在接口必须按顺序一个一个执行。而Angular提供的Http服务请求接口都是异步请求,因此通常情况下会写成如下的代码ÿ…...
2024/4/28 13:07:59 - angular8 typeof Observable”上不存在属性“forkJoin”
想用angular实现等待多异步请求结果同时处理 引入相应依赖: import {Observable} from "rxjs"; 然后将所有的http请求组合成数组传入forkJoin: let arr [this.httpClient.get<any>(url1),this.httpClient.get<any>(url2),this…...
2024/4/27 21:44:14 - angular中rxjs针对异步数据流的编程以及Observable的工具方法,promise的异步数据编程
在angular中,通用的方法一般放置在services.ts文件中 在service文件中封装和处理异步的方法,在当前组件的ts中调用并取值 获取异步数据方法: 1 通过回调函数获取异步方法中的值 2 通过promise 3 通过rxjs 4 了解rxjs中的工具函数map 和 filt…...
2024/4/27 23:07:06 - Angular2学习:Subject和Observable 文章标题
原文链接:http://blog.csdn.net/superpeepi_csdn/article/details/72673122 Subject是微信公众号,Observable是微信用户。 1个Subject可以对应n个不同的Observable,Observable只要向Subject要求接收,每次…...
2024/4/28 7:16:55 - angular 中 subject observable
http://jasonwatmore.com/post/2016/12/01/angular-2-communicating-between-components-with-observable-subject...
2024/4/28 6:01:51 - 用angular-file-upload在上传文件的时候动态设置一同发送的参数
尝试:刚开始以为这个参数设置的是uploader对象的formData字段,使用onBeforeUploadItem 进行监听在上传文件之前修改uploader.formData,但是一直无法成功,修改是滞后的,可见在onBeforeUploadItem 被调用之前formData已经…...
2024/4/28 10:44:55 - angular ng-file-upload
传送门:https://github.com/danialfarid/ng-file-upload#install <script src"angular(.min).js"></script> <script src"ng-file-upload-shim(.min).js"></script> <!-- for no html5 browsers support --> <…...
2024/4/21 3:45:18 - Angular4上传文件中ng2-file-upload 使用方法
使用方法: 第一步:安装 ng2-file-upload npm install ng2-file-upload --save 第二步:在需要使用该插件的页面的对应module文件的imports中引入CommonModule 和 FileUploadModuleNgModule({imports:[...FileUploadModule...])第三步&#x…...
2024/4/21 3:45:15 - angular-file-upload 后台webapi C#
angular-file-upload 怎么设置加载环境,随便一搜索一大堆,我就不写了. 主要写一下现实功能: 1.单个图片文件上传,上传完成之后显示图片,同时清空选择的文件,在上传时需要重新选择.【多选,什么参数之类,请参考其它博客】 2.C#编写webapi 保存前端传过来的文件.返回保存的网页路径…...
2024/4/21 3:45:15 - angular-file-upload封装为指令+图片尺寸限制
不了解angular-file-upload基础使用 请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址 下文如果有更好的建议请多多评论 1. directive.js中的指令编写 /*上传插件 */ app.directive(myUpload, function (FileUploader) {var helper {getType: function…...
2024/4/21 3:45:13 - angular-file-upload+springMVC的使用
2019独角兽企业重金招聘Python工程师标准>>> 最近项目中需要用到文件上传,使用了angular-file-upload插件完成 首先来介绍下这个插件的一些属性(参考官方文档) FileUploader 属性 url {String}: 上传文件的服务器路径alias {Strin…...
2024/4/21 3:45:13 - angular-file-upload+struts的使用
参考帖子 http://www.cnblogs.com/wangzun/p/6099884.htmlhttp://www.cnblogs.com/highriver/archive/2011/06/08/2068413.htmlhttp://www.oschina.net/question/1036705_2146870http://blog.csdn.net/pq258280920/article/details/25033693http://blog.sina.com.cn/s/blog_e50…...
2024/4/27 9:31:51 - angular-file-upload.min.js.map文件下载
https://github.com/nervgh/angular-file-upload 下载地址 在文件 菜单栏有对应文件转载于:https://www.cnblogs.com/yclblog/p/7093553.html...
2024/4/21 3:45:10 - Angularjs ng-file-upload上传文件
ng-file-upload angular-file-upload 是一款轻量级的 AngularJS 文件上传工具,为不支持浏览器的 FileAPI polyfill 设计,使用 HTML5 直接进行文件上传。 特性 支持上传进度,在上传的时候,可以取消或者中止,支持文件拖…...
2024/4/20 20:01:45
最新文章
- Vue开发者工具Vue.js devtools Vue开发者工具安装步骤前端开发工具免费附带教程
下载地址: 链接: https://pan.baidu.com/s/1JaGvhS4NoD8lL07n2ScE9A 密码: 9rfs 安装步骤: 以谷歌浏览器为例 第一步:打开Chrome的拓展程序 如图 第二步: 将下载好的拓展程序拖入即可,如下图 第三步:…...
2024/4/28 15:42:28 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 解决前端性能瓶颈:高效处理大量数据渲染与复杂交互的策略与优化方法
✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 …...
2024/4/25 14:28:35 - 全自动封箱机的工作原理:科技与效率的完美结合
随着科技的不断发展,越来越多的自动化设备走进了我们的日常生活和工业生产中。其中,全自动封箱机作为物流包装领域的重要一环,凭借其高效、精准的工作性能,正逐渐成为提升生产效率、降低劳动成本的得力助手。星派就来与大家深入探…...
2024/4/24 5:35:22 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/28 13:52:11 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/28 13:51:37 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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