mvvm 原理
2019独角兽企业重金招聘Python工程师标准>>>
看完这篇关于MVVM的文章,面试通过率提升了80%
来看看目前最火的MVVM
- 今天面试又被问到什么是MVVM?
- 光靠说理论已经糊弄不过去了?
- 什么!MVVM的实现不止一种啊?
- 往下看~ 亲手带你剖析MVVM原理!
先来总结下MVVM的实现方式
- 传统的MVC中通过发布订阅来进行数据和视图的绑定监听
- angular1.x中通过脏值检测来实现MVVM模式
- 目前主流Vue的模式:数据劫持 Object.defineProperty、发布订阅
- ES6中的新特性Proxy和Reflect
谈谈现代版的框架
直接从主流的说起!
vue的特点不必多说(简单易用)。修改数据方便不需要记忆api方法,这都归功于Object.defineProperty,它可以在数据的设置和获取时增加我们自己的功能!(像墙一样)
总结下实现MVVM都要掌握哪些!
- 模板编译(Compile)
- 数据劫持(Observer)
- 发布的订阅(Dep)
- 观察者(Watcher)
MVVM模式就要将这些板块进行整合,实现模板和数据的绑定!
看看我画图的功底,有个印象就好!
先简单来说说MVVM
- 数据就是简单的javascript对象,需要将数据绑定到模板上
- 监听视图的变化,视图变化后通知数据更新,数据更新会再次导致视图的变化!
Vue基础案例
看段大众代码,接下来我们就基于这段代码搞一下MVVM的实现
<div id="app"><!-- 双向数据绑定 靠的是表单 --><input type="text" v-model="message.a"><div>我很帅</div>{{message.a}} {{b}}
</div>
<script src="watcher.js"></script>
<script src="observer.js"></script>
<script src="compile.js"></script>
<script src="MVVM.JS"></script>
<script>// 我们的数据一般都挂载在vm上let vm = new MVVM({el:'#app',data:{message:{a:'jw'},b:'MVVM'}})
</script>
复制代码
这里我们用了自己的MVVM库,这个库是用来整合所有板块的!
MVVM构建
直接用ES6来打造我们的MVVM
class MVVM{constructor(options){// 一上来 先把可用的东西挂载在实例上this.$el = options.el;this.$data = options.data;// 如果有要编译的模板我就开始编译if(this.$el){// 用数据和元素进行编译new Compile(this.$el, this);}}
}
复制代码
模板编译
MVVM中调用了Compile类来编译我们的页面,开始来实现模板编译
先来个基础的架子
class Compile {constructor(el, vm) {// 看看传递的元素是不是DOM,不是DOM我就来获取一下~this.el = this.isElementNode(el) ? el : document.querySelector(el);this.vm = vm;if (this.el) {// 如果这个元素能获取到 我们才开始编译// 1.先把这些真实的DOM移入到内存中 fragment (性能优化)let fragment = this.node2fragment(this.el);// 2.编译 => 提取想要的元素节点 v-model 和文本节点 {{}}this.compile(fragment);// 3.把编译号的fragment在塞回到页面里去this.el.appendChild(fragment);}}/* 专门写一些辅助的方法 */isElementNode(node) {return node.nodeType === 1;}/* 核心的方法 */compileElement(node) {}compileText(node) {}compile(fragment) {}node2fragment(el) {}
}
复制代码
接下来一个个的方法来搞
node2fragment
node2fragment(el) { // 需要将el中的内容全部放到内存中// 文档碎片 内存中的dom节点let fragment = document.createDocumentFragment();let firstChild;while (firstChild = el.firstChild) {fragment.appendChild(firstChild);// appendChild具有移动性}return fragment; // 内存中的节点
}
复制代码
compile
compile(fragment) {// 需要递归 每次拿子元素let childNodes = fragment.childNodes;Array.from(childNodes).forEach(node => {if (this.isElementNode(node)) {// 是元素节点,还需要继续深入的检查// 这里需要编译元素this.compileElement(node);this.compile(node)} else {// 文本节点// 这里需要编译文本this.compileText(node);}});
}
复制代码
我们在弄出两个方法compileElement,compileText来专门处理对应的逻辑
compileElement&compileText
/*辅助的方法*/
// 是不是指令
isDirective(name) {return name.includes('v-');
}
----------------------------
compileElement(node) {// 带v-model v-text let attrs = node.attributes; // 取出当前节点的属性Array.from(attrs).forEach(attr => {// 判断属性名字是不是包含v-model let attrName = attr.name;if (this.isDirective(attrName)) {// 取到对应的值放到节点中let expr = attr.value;let [, type] = attrName.split('-'); // // 调用对应的编译方法 编译哪个节点,用数据替换掉表达式CompileUtil[type](node, this.vm, expr);}})
}
compileText(node) {let expr = node.textContent; // 取文本中的内容let reg = /\{\{([^}]+)\}\}/g; // {{a}} {{b}} {{c}}if (reg.test(expr)) { // 调用编译文本的方法 编译哪个节点,用数据替换掉表达式CompileUtil['text'](node, this.vm, expr);}
}
复制代码
CompileUtil
我们要实现一个专门用来配合Complie类的工具对象
先只处理文本和输入框的情况
CompileUtil = {text(node, vm, expr) { // 文本处理let updateFn = this.updater['textUpdater'];// 用处理好的节点和内容进行编译updateFn && updateFn(node, value)},model(node, vm, expr) { // 输入框处理let updateFn = this.updater['modelUpdater'];// 用处理好的节点和内容进行编译updateFn && updateFn(node, value);},updater: {// 文本更新textUpdater(node, value) {node.textContent = value},// 输入框更新modelUpdater(node, value) {node.value = value;}}
}
复制代码
实现text方法
text(node, vm, expr) { // 文本处理let updateFn = this.updater['textUpdater'];// 文本比较特殊 expr可能是'{{message.a}} {{b}}'// 调用getTextVal方法去取到对应的结果let value = this.getTextVal(vm, expr);updateFn && updateFn(node, value)
},
getTextVal(vm, expr) { // 获取编译文本后的结果return expr.replace(/\{\{([^}]+)\}\}/g, (...arguments) => {// 依次去去数据对应的值return this.getVal(vm, arguments[1]);})
},
getVal(vm, expr) { // 获取实例上对应的数据expr = expr.split('.'); // {{message.a}} [message,a] 实现依次取值// vm.$data.message => vm.$data.message.areturn expr.reduce((prev, next) => { return prev[next];}, vm.$data);
}
复制代码
实现Model方法
model(node, vm, expr) { // 输入框处理let updateFn = this.updater['modelUpdater'];// 这里应该加一个监控 数据变化了 应该调用这个watch的callback updateFn && updateFn(node, this.getVal(vm, expr));
}
复制代码
看下编译后的效果^_^
数据劫持
我们一直说Object.defineProperty有劫持功能咱就看看这个是怎样劫持的
默认情况下定义属性给属性设置的操作是这样的
let school = {name:''}
school.name = 'jw'; // 当我给属性设置时希望做一些操作
console.log(school.name); // 当我获取属性时也希望对应有写操作
复制代码
这时候Object.defineProperty登场
let school = {name:''}
let val;
Object.defineProperty(school, 'name', {enumerable: true, // 可枚举,configurable: true, // 可配置get() {// todoreturn val;},set(newVal) {// todoval = newVal}
});
school.name = 'jw';
console.log(school.name);
复制代码
这样我们可以在设置值和获取值时做我们想要做的操作了
接下来我们就来写下一个类Observer
// 在MVVM加上Observe的逻辑
if(this.$el){// 数据劫持 就是把对想的所有属性 改成get和set方法new Observer(this.$data);// 用数据和元素进行编译new Compile(this.$el, this);
}
--------------------------------------
class Observer{constructor(data){this.observe(data); }observe(data){ // 要对这个data数据将原有的属性改成set和get的形式// defineProperty针对的是对象if(!data || typeof data !== 'object'){return;}// 要将数据 一一劫持 先获取取到data的key和valueObject.keys(data).forEach(key=>{// 定义响应式变化this.defineReactive(data,key,data[key]);this.observe(data[key]);// 深度递归劫持});}// 定义响应式defineReactive(obj,key,value){// 在获取某个值的适合 想弹个框let that = this;Object.defineProperty(obj,key,{enumerable:true,configurable:true,get(){ // 当取值时调用的方法return value;},set(newValue){ // 当给data属性中设置值的适合 更改获取的属性的值if(newValue!=value){// 这里的this不是实例 that.observe(newValue);// 如果是设置的是对象继续劫持value = newValue;}}});}
}
复制代码
来再看看效果^_^
Watcher实现
观察者的目的就是给需要变化的那个元素增加一个观察者,用新值和老值进行比对,如果数据变化就执行对应的方法
class Watcher{ // 因为要获取老值 所以需要 "数据" 和 "表达式"constructor(vm,expr,cb){this.vm = vm;this.expr = expr;this.cb = cb;// 先获取一下老的值 保留起来this.value = this.get();}// 老套路获取值的方法,这里先不进行封装getVal(vm, expr) { expr = expr.split('.'); return expr.reduce((prev, next) => {return prev[next];}, vm.$data);}get(){let value = this.getVal(this.vm,this.expr);return value;}// 对外暴露的方法,如果值改变就可以调用这个方法来更新update(){let newValue = this.getVal(this.vm, this.expr);let oldValue = this.value;if(newValue != oldValue){this.cb(newValue); // 对应watch的callback}}
}
复制代码
在哪里使用watcher?答案肯定是compile呀,给需要重新编译的DOM增加watcher
text(node, vm, expr) { // 文本处理let updateFn = this.updater['textUpdater'];let value = this.getTextVal(vm, expr);
+ expr.replace(/\{\{([^}]+)\}\}/g, (...arguments) => {
+ new Watcher(vm, arguments[1],(newValue)=>{
+ // 如果数据变化了,文本节点需要重新获取依赖的属性更新文本中的内容
+ updateFn && updateFn(node,this.getTextVal(vm,expr));
+ });
+ })updateFn && updateFn(node, value)
},
model(node, vm, expr) { // 输入框处理let updateFn = this.updater['modelUpdater'];
+ new Watcher(vm,expr,(newValue)=>{
+ // 当值变化后会调用cb 将新的值传递过来
+ updateFn && updateFn(node, newValue);
+ });updateFn && updateFn(node, this.getVal(vm, expr));
}
复制代码
发布订阅
如何将视图和数据关联起来呢?就是将每个数据和对应的watcher关联起来。当数据变化时让对应的watcher执行update方法即可!再想想在哪做操作呢?就是我们的set和get!
Dep实现
class Dep{constructor(){// 订阅的数组this.subs = []}addSub(watcher){this.subs.push(watcher);}notify(){this.subs.forEach(watcher=>watcher.update());}
}
复制代码
关联dep和watcher
watcher中有个重要的逻辑就是this.get();每个watcher被实例化时都会获取数据从而会调用当前属性的get方法
// watcher中的get方法
get(){// 在取值前先将watcher保存到Dep上Dep.target = this;let value = this.getVal(this.vm,this.expr); // 会调用属性对应的get方法Dep.target = null;return value;
}
// 更新Observer中的defineReactive
defineReactive(obj,key,value){let that = this;
+ let dep = new Dep(); // 每个变化的数据 都会对应一个数组,这个数组是存放所有更新的操作Object.defineProperty(obj,key,{enumerable:true,configurable:true,get(){ // 当取值时调用的方法Dep.target && dep.addSub(Dep.target);return value;},set(newValue){if(newValue!=value){that.observe(newValue);value = newValue;dep.notify(); // 通知所有人 数据更新了}}});
}
复制代码
到此数据和视图就关联起来了!^_^
监听输入事件
setVal(vm,expr,value){ expr = expr.split('.');return expr.reduce((prev,next,currentIndex)=>{if(currentIndex === expr.length-1){return prev[next] = value;}return prev[next];},vm.$data);
},
model(node, vm, expr) {let updateFn = this.updater['modelUpdater'];new Watcher(vm,expr,(newValue)=>{// 当值变化后会调用cb 将新的值传递过来 ()updateFn && updateFn(node, this.getVal(vm, expr));});
+ node.addEventListener('input',(e)=>{
+ let newValue = e.target.value;
+ // 监听输入事件将输入的内容设置到对应数据上
+ this.setVal(vm,expr,newValue)
+ });updateFn && updateFn(node, this.getVal(vm, expr));
}
复制代码
代理数据
class MVVM{constructor(options){this.$el = options.el;this.$data = options.data;if(this.$el){new Observer(this.$data);// 将数据代理到实例上直接操作实例即可,不需要通过vm.$data来进行操作this.proxyData(this.$data);new Compile(this.$el, this);}}proxyData(data){Object.keys(data).forEach(key=>{Object.defineProperty(this,key,{get(){return data[key]},set(newValue){data[key] = newValue}})})}
}
复制代码
看看最终效果!
转载于:https://my.oschina.net/u/2428630/blog/2979018
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- mvvm模式解读
MVVM是Model-View-ViewModel的简写。它模式是MVC-MVP-MVVM的进化版。 Model负责用javascript对象表示.View负责视图层显示,而Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示,还负责View的界面修改同步到Model更新数据。…...
2024/5/1 1:38:16 - 剖析Vue原理实现双向绑定MVVM
转载于:https://segmentfault.com/a/1190000006599500 本文能帮你做什么?1、了解vue的双向数据绑定原理以及核心代码模块2、缓解好奇心的同时了解如何实现双向绑定为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造&am…...
2024/5/8 14:40:16 - JavaScript之后端Web服务器开发Node.JS的MVVM模型学习篇
JavaScript之后端Web服务器开发Node.JS的MVVM模型学习篇MVVM单向绑定双向绑定同步DOM结构集成API在线电子表格MVVM 什么是MVVM?MVVM是Model-View-ViewModel的缩写。要编写可维护的前端代码绝非易事。前面已经用MVC模式通过koa实现了后端数据、模板页面和控制器的分…...
2024/4/20 18:51:48 - 全切双眼皮埋线北京艺星搜
...
2024/4/20 18:51:55 - (转载)Vue.js中的MVVM
MVVM的理解 MVVM拆开来即为Model-View-ViewModel,有View,ViewModel,Model三部分组成。View层代表的是视图、模版,负责将数据模型转化为UI展现出来。Model层代表的是模型、数据,可以在Model层中定义数据修改和操作的业务…...
2024/4/20 18:51:48 - MVC、MVP、MVVM详解和区别
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50478335 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的收货! 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高…...
2024/5/1 11:37:17 - MVVM原理还你
众所周知当下是MVVM盛行的时代,从早期的Angular到现在的React和Vue,再从最初的三分天下到现在的两虎相争。 无疑不给我们的开发带来了一种前所未有的新体验,告别了操作DOM的思维,换上了数据驱动页面的思想,果然时代的进…...
2024/4/20 18:51:45 - 为什么我没有浮肿的做双眼皮在哪家医院好评
...
2024/4/20 18:51:50 - 什么是MVVM,MVVM和MVC的区别?
1. Mvvm定义MVVM是Model-View-ViewModel的简写。即模型-视图-视图模型。【模型】指的是后端传递的数据。【视图】指的是所看到的页面。【视图模型】mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将【模型】转化成【视图】,即…...
2024/4/20 18:51:49 - HandlerInterceptor拦截器的使用
https://blog.csdn.net/sinat_32023305/article/details/81284518...
2024/4/27 12:58:36 - 前后端分离——MVVM 模式
阅读目录 简而言之组成部分没有什么是一个栗子不能解决的 简而言之 之前对 MVVM 模式一直只是模模糊糊的认识,正所谓没有实践就没有发言权,通过这两年对 Vue 框架的深入学习和项目实践,终于可以装B了有了拨开云雾见月明的感觉。 Model–Vi…...
2024/5/8 13:20:57 - loadlibrary返回 NULL , 错误码值126
DWORD dwError = 0;hInstance = LoadLibrary(strDllName);if(hInstance == NULL){dwError = GetLastError();return NULL; }加断点发现 dwError 等于126 DLL路径都正确 百思不得解,后来想了想之前都挺正常的,怎么突然就这样了,刚刚只是在dll的代码中调用了另一个DLL,难…...
2024/4/21 7:21:25 - ureport 导出Excel无法计算
ureport excel导出的为文本格式,无法计算求和。在写报表数据源的sql语句时,直接把字符串转换成数字类型,也就是字段+0。这样的Excel导出的时候字段不用转换成数字直接就可以计算求和啦。但是又遇到了一个小阻碍,就是当转为数字时,在属性设置的“格式化”(保留两位小数就失…...
2024/4/21 7:21:26 - 拉双眼皮上哪医院好啊
...
2024/4/21 7:21:22 - 6.2单元格标签的属性
<td>和<table>标签的属性非常相似,用于设定表格中某一单元格的属性 1.设置单元格的大小2.设置单元格水平对齐属性 <td align="right"或"left"或"center">3.设置单元格的垂直对齐属性 <td valign="top"或"mi…...
2024/4/21 7:21:21 - 北京做双眼皮比较好的医院
...
2024/4/21 7:21:21 - 搞双眼皮哪家医院好呀
...
2024/4/21 7:21:20 - 如何让spyder编写的代码自动格式化
问题的发现 python的许多编辑器都可以写出漂亮精简的代码,但是一般的主流编辑器都很好有代码自动格式化的功能。visual studio在每一行写完代码敲击分号(;)的时候都能够对这一整行的代码进行重新排版,使其能够具有规范化代码形式。 这是没有打分号的形式: int a,b ,c= 12这…...
2024/4/21 7:21:19 - 自定义报表导出的文件名
利用润乾报表 html 标签中提供的“saveAsName”属性;转载于:https://www.cnblogs.com/52wxb1314/p/11050064.html...
2024/4/21 7:21:17 - LoadLibrary "xxxx" 找不到指定的模块-------解决方法
转自:http://blog.163.com/yijia_luo/blog/static/1253883201241694840808/ 今天在注册一个JpgShowCtl.ocx控件时,注册失败,显示信息是“LoadLibrary "JpgShowCtl.ocx": 找不到指定的模块”,怀疑是少装了几个链接库,随后通过depends工具找到原因了。1. 到网上下…...
2024/4/21 7:21:17
最新文章
- nestjs从零到一,快速上手(六)---- 增删改查
1. 批量更新数据以及关联数据 user.controller.ts Patch(/update)updateUser(Body() dto: any) {const user dto as User;return this.userService.update(user);} user.service.ts async update(body) {if (!body.id) {return id不能为空;}// 更新多个模型数据const userTe…...
2024/5/8 14:59:45 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 前端 js 经典:字符编码详解
前言:计算机只能识别二进制,开发语言中数据类型还有数字,字母,中文,特殊符号等,都需要转化成二进制编码才能让技术机识别。 一. 编码方式 ACSLL、Unicode、utf-8、URL 编码、base64 等。 1. ACSLL 对英语…...
2024/5/4 10:30:35 - C#-实现软删除
文章目录 前言1. 使用布尔字段标记删除状态2. 修改查询以忽略软删除的记录3. 实现软删除的方法4. 考虑使用全局查询过滤器5. 处理关联实体6. 考虑性能和存储软删除的好处:软删除的坏处: 总结 前言 后端中,经常使用软删除来标志删除一些数据。…...
2024/5/8 14:00:29 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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