前端工程师必备:前端的模块化
模块化的理解
- 什么是模块?
- 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起;
- 块的内部数据/实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信;
- 一个模块的组成
- 数据--->内部的属性;
- 操作数据的行为--->内部的函数;
- 模块化是指解决一个复杂的问题时自顶向下把系统划分成若干模块的过程,有多种属性,分别反映其内部特性;
- 模块化编码:编码时是按照模块一个一个编码的, 整个项目就是一个模块化的项目;
非模块化的问题
- 页面加载多个js的问题:
<script type="text/javascript" src="module1.js"></script> <script type="text/javascript" src="module2.js"></script> <script type="text/javascript" src="module3.js"></script> <script type="text/javascript" src="module4.js"></script>
- 发生问题:
- 难以维护 ;
- 依赖模糊;
- 请求过多;
- 所以,这些问题可以通过现代模块化编码和项目构建来解决;
模块化的优点
- 更好地分离:避免一个页面中放置多个script标签,而只需加载一个需要的整体模块即可,这样对于HTML和JavaScript分离很有好处;
- 更好的代码组织方式:有利于后期更好的维护代码;
- 按需加载:提高使用性能,和下载速度,按需求加载需要的模块
- 避免命名冲突:JavaScript本身是没有命名空间,经常会有命名冲突,模块化就能使模块内的任何形式的命名都不会再和其他模块有冲突。
- 更好的依赖处理:使用模块化,只需要在模块内部申明好依赖的就行,增加删除都直接修改模块即可,在调用的时候也不用管该模块依赖了哪些其他模块。
模块化的发展历程
原始写法
- 只是把不同的函数简单地放在一起,就算一个模块;
function fun1(){   //... } function fun2(){   //... } //上面的函数fun1,fun2组成了一个模块,使用的时候直接调用某个函数就行了。
- 缺点:
- "污染"了全局变量,无法保证不与其他模块发生变量名冲突;
- 模块成员之间看不出直接关系。
对象写法
- 为了解决污染全局变量的问题,可以把模块写成一个对象,所有的模块成员都放到这个对象里面。
 var module1 = new Object({count : 0,fun1 : function (){      //...    },   fun2 : function (){      //...    }  });  //这个里面的fun1和fun2都封装在一个赌侠宁里,可以通过对象.方法的形式进行调用;  module1.fun1();
- 优点:
- 减少了全局上的变量数目;
- 缺点:
- 本质是对象,而这个对象会暴露所有模块成员,内部状态可以被外部改写。
立即执行函数(IIFE模式)
- 避免暴露私有成员,所以使用立即执行函数(自调函数,IIFE);
- 作用: 数据是私有的, 外部只能通过暴露的方法操作
var module1 = (function(){var count = 0;var fun1 = function(){//... }var fun2 = function(){//... }//将想要暴露的内容放置到一个对象中,通过return返回到全局作用域。return{fun1:fun1,fun2:fun2} })() //这样的话只能在全局作用域中读到fun1和fun2,但是读不到变量count,也修改不了了。 //问题:当前这个模块依赖另一个模块怎么办?
IIFE的增强(引入依赖)
- 如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"增强模式";
- IIFE模式增强:引入依赖;
- 这就是现代模块实现的基石;
var module1 = (function (mod){   mod.fun3 = function () {    //... };return mod; })(module1); //为module1模块添加了一个新方法fun3(),然后返回新的module1模块。//引入jquery到项目中; var Module = (function($){var _$body = $("body"); // we can use jQuery now!var foo = function(){console.log(_$body); // 特权方法 }// Revelation Patternreturn {foo: foo} })(jQuery) Module.foo();
js模块化需要解决那些问题:
- 1.如何安全的包装一个模块的代码?(不污染模块外的任何代码)
- 2.如何唯一标识一个模块?
- 3.如何优雅的把模块的API暴漏出去?(不能增加全局变量)
- 4.如何方便的使用所依赖的模块?
模块化规范
- Node: 服务器端
- Browserify : 浏览器端
CommonJS:服务器端
-
概述
- Node 应用由模块组成,采用 CommonJS 模块规范。
- CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
-
特点
- 所有代码都运行在模块作用域,不会污染全局作用域。
- 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
- 模块加载的顺序,按照其在代码中出现的顺序。
-
基本语法:
- 定义暴露模块 : exports
exports.xxx = value // 通过module.exports指定暴露的对象value module.exports = value
- 引入模块 : require
var module = require('模块相对路径')
-
引入模块发生在什么时候?
- Node:运行时, 动态同步引入;
- Browserify:在运行前对模块进行编译/转译/打包的处理(已经将依赖的模块包含进来了), 运行的是打包生成的js, 运行时不需要再从远程引入依赖模块;
CommonJS通用的模块规范(同步)
- Node内部提供一个Module构建函数。所有模块都是Module的实例。
- 每个模块内部,都有一个module对象,代表当前模块。
- module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
- Node为每个模块提供一个exports变量,指向module.exports。
- 如果一个模块的对外接口,就是一个单一的值,不能使用exports输出,只能使用module.exports输出。
- Modules/1.0规范包含内容:
- 模块的标识应遵循的规则(书写规范)
- 定义全局函数require,通过传入模块标识来引入其他模块,执行的结果即为模块暴露出来的API;
- 如果被require函数引入的模块中也包含依赖,那么依次加载这些依赖;
- 如果引入模块失败,那么require函数应该报一个异常;
- 模块通过变量exports来向外暴露API,exports赋值暴露的只能是一个对象
exports = {Obj}
,暴露的API须作为此对象的属性。exports本质是引入了module.exports的对象。不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。 - 如果暴露的不是变量exports,而是module.exports。module变量代表当前模块,这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
exports=module.exports={Obj}
node中的commonJS教程
- 1.安装node.js;
- 2.创建项目结构
//结构如下 |-modules|-module1.js//待引入模块1|-module2.js//待引入模块2|-module3.js//待引入模块3 |-app.js//主模块 |-package.json{"name": "commonjsnode","version": "1.0.0"}
-
3.下载第三方模块:举例express
npm i express --save
-
4.模块化编码
// module1 // 使用module.exports = value向外暴露一个对象 module.exports = {name: 'this is module1',foo(){console.log('module1 foo()');} } // module2 // 使用module.exports = value向外暴露一个函数 module.exports = function () {console.log('module2()'); } // module3 // 使用exports.xxx = value向外暴露一个对象exports.foo = function () {console.log('module3 foo()');};exports.bar = function () {console.log('module3 bar()');};exports.name = 'this is module3'//app.js文件 var uniq = require('uniq'); //引用模块 let module1 = require('./modules/module1'); let module2 = require('./modules/module2'); let module3 = require('./modules/module3'); //使用模块 module1.foo(); module2(); module3.foo(); module3.bar(); module3.name;
- 5.通过node运行app.js
- 命令:node.app.js
- 工具:右键-->运行
浏览器中的commonJS教程
- 借助Browserify
- 步骤
- 创建项目结构
|-js|-dist //打包生成文件的目录|-src //源码所在的目录|-module1.js|-module2.js|-module3.js|-app.js //应用主源文件 |-index.html //浏览器上的页面 |-package.json{"name": "browserify-test","version": "1.0.0"}
-
下载browserify
- 全局: npm install browserify -g
- 局部: npm install browserify --save-dev
-
定义模块代码:index.html文件要运行在浏览器上,需要借助browserify将app.js文件打包编译,如果直接在index.html引入app.js就会报错。
-
打包处理js:根目录下运行
browserify js/src/app.js -o js/dist/bundle.js
-
页面使用引入:
<script type="text/javascript" src="js/dist/bundle.js"></script>
AMD : 浏览器端
- CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
- AMD规范则是非同步加载模块,允许指定回调函数,可以实现异步加载依赖模块,并且会提前加载;
- 由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。
- 如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
语法
AMD规范基本语法
- 定义暴露模块:
define([依赖模块名], function(){return 模块对象})
- 引入模块:
require(['模块1', '模块2', '模块3'], function(m1, m2){//使用模块对象})
兼容CommonJS规范的输出模块
define(function (require, exports, module) { var reqModule = require("./someModule");requModule.test();exports.asplode = function () {//someing } });
AMD:异步模块定义规范(预加载)
-
AMD规范:github.com/amdjs/amdjs…
-
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。
-
它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
-
AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback);
- 第一个参数[module],是一个数组,里面的成员就是要加载的模块;
- 第二个参数callback,则是加载成功之后的回调函数。
-
目前,主要有两个Javascript库实现了AMD规范:RequireJS和curl.js。
RequireJS
- 优点
- 实现js文件的异步加载,避免网页失去响应;
- 管理模块之间的依赖性,便于代码的编写和维护。
require.js使用教程
- 下载require.js, 并引入
- 官网: requirejs.org/
- 中文:blog.csdn.net/sanxian_li/…
- github : github.com/requirejs/r…
- 将require.js导入项目:
js/libs/require.js
- 创建项目结构
|-js|-libs|-require.js // 引入的require.js|-modules|-alerter.js|-dataService.js|-main.js |-index.html
-
定义require.js的模块代码
- require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写。
- 具体来说,就是模块必须采用特定的define()函数来定义;
- 如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。
define(['myLib'], function(myLib){   function foo(){     myLib.doSomething();   }   // 暴露模块   return {foo : foo}; }); //当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。
- 如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性;
```// dataService.jsdefine(function () {let msg = 'this is dataService'function getMsg() {return msg.toUpperCase()}return {getMsg}})// alerter.jsdefine(['dataService', 'jquery'], function (dataService, $) {let name = 'Tom2'function showMsg() {$('body').css('background', 'gray')alert(dataService.getMsg() + ', ' + name)}return {showMsg}})```
-
应用主(入口)js: main.js
- 使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块main.js的头部,参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。
(function () {//配置 require.config({//基本路径baseUrl: "js/",//模块标识名与模块路径映射 paths: {"alerter": "modules/alerter",//此处不能写成alerter.js,会报错"dataService": "modules/dataService",}})//引入使用模块require( ['alerter'], function(alerter) {alerter.showMsg()})})()
-
页面使用模块:
<script data-main="js/main" src="js/libs/require.js"></script>
定义模块
- require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。
- 具体来说,每个模块要定义:
- 1、exports值(输出的变量名),表明这个模块外部调用时的名称;
- 2、deps数组,表明该模块的依赖性。
- 支持的配置项:
- baseUrl :所有模块的查找根路径。
- 当加载纯.js文件(依赖字串以/开头,或者以.js结尾,或者含有协议),不会使用baseUrl。
- 如未显式设置baseUrl,则默认值是加载require.js的HTML所处的位置。如果用了data-main属性,则该路径就变成baseUrl。
- baseUrl可跟require.js页面处于不同的域下,RequireJS脚本的加载是跨域的。唯一的限制是使用text! plugins加载文本内容时,这些路径应跟页面同域,至少在开发时应这样。优化工具会将text! plugin资源内联,因此在使用优化工具之后你可以使用跨域引用text! plugin资源的那些资源。
- paths:path映射那些不直接放置于baseUrl下的模块名。
- 设置path时起始位置是相对于baseUrl的,除非该path设置以"/"开头或含有URL协议(如http:)。
- 用于模块名的path不应含有.js后缀,因为一个path有可能映射到一个目录。路径解析机制会自动在映射模块名到path时添加上.js后缀。在文本模版之类的场景中使用require.toUrl()时它也会添加合适的后缀。
- 在浏览器中运行时,可指定路径的备选(fallbacks),以实现诸如首先指定了从CDN中加载,一旦CDN加载失败则从本地位置中加载这类的机制;
- shim: 为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。
- baseUrl :所有模块的查找根路径。
使用第三方基于require.js的框架(jquery)
- 将jquery的库文件导入到项目:
js/libs/jquery-1.10.1.js
- 在main.js中配置jquery路径
paths: {'jquery': 'libs/jquery-1.10.1' }
- 在alerter.js中使用jquery
define(['dataService', 'jquery'], function (dataService, \$) {var name = 'xfzhang'function showMsg() {$('body').css({background : 'red'})alert(name + ' '+dataService.getMsg())}return {showMsg}})
使用第三方不基于require.js的框架(angular)
- 将angular.js导入项目:
js/libs/angular.js
- 流行的函数库(比如jQuery)符合AMD规范,更多的库并不符合。这样的模块在用require()加载之前,要先用require.config()方法,定义它们的一些特征。
// main.js中配置 (function () {//配置 require.config({//基本路径baseUrl: "js/",//模块标识名与模块路径映射 paths: {//第三方库作为模块'jquery' : './libs/jquery-1.10.1','angular' : './libs/angular',//自定义模块"alerter": "./modules/alerter","dataService": "./modules/dataService"},/*配置不兼容AMD的模块exports : 指定与相对应的模块名对应的模块对象*/shim: {'angular' : {exports : 'angular'}}})//引入使用模块require( ['alerter', 'angular'], function(alerter, angular) {alerter.showMsg()console.log(angular);}) })()
CMD : 浏览器端
- CMD规范:github.com/seajs/seajs…
- CMD规范专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行。
- CMD规范整合了CommonJS和AMD规范的特点。
- 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD模块定义规范
- 基本语法
- 定义暴露模块:
// 没有依赖的模块 define(function(require, module, exports){let value = 'xxx';//通过require引入依赖模块//通过module.exports/exports来暴露模块exports.xxx = valuemodule.exports = value }) // 有依赖的模块 define(function(require, exports, module){//引入依赖模块(同步)var module2 = require('./module2')//引入依赖模块(异步)require.async('./module3', function (m3) {......})//暴露模块exports.xxx = value })
- 使用模块seajs.use(['模块1', '模块2'])
- 定义暴露模块:
sea.js简单使用教程
- 下载sea.js, 并引入
- 官网: seajs.org/
- github : github.com/seajs/seajs
- 将sea.js导入项目:
js/libs/sea.js
- 如何定义导出模块 :
define() exports module.exports
- 如何依赖模块:
require()
- 如何使用模块:
seajs.use()
- 创建项目结构
|-js|-libs|-sea.js|-modules|-module1.js|-module2.js|-module3.js|-module4.js|-main.js |-index.html
-
定义sea.js的模块代码
- module1.js
define(function (require, exports, module) {//内部变量数据var data = 'this is module1'//内部函数function show() {console.log('module1 show() ' + data)}//向外暴露exports.show = show })
- module2.js
define(function (require, exports, module) {module.exports = {msg: 'I Will Back'} })
- module3.js
define(function (require, exports, module) {const API_KEY = 'abc123'exports.API_KEY = API_KEY })
- module4.js
define(function (require, exports, module) {//引入依赖模块(同步)var module2 = require('./module2');function show() {console.log('module4 show() ' + module2.msg)}exports.show = show//引入依赖模块(异步)require.async('./module3', function (m3) {console.log('异步引入依赖模块3 ' + m3.API_KEY)}) })
- main.js : 主(入口)模块
define(function (require) {var m1 = require('./module1')var m4 = require('./module4')m1.show()m4.show() })
-
index.html:
<script type="text/javascript" src="js/libs/sea.js"></script> <script type="text/javascript">seajs.use('./js/modules/main') </script>
ES6模块化
- 模块化的规范:CommonJS和AMD两种。前者用于服务器,后者用于浏览器。
- 而ES6 中提供了简单的模块系统,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。
- ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。
基本用法
-
es6 中新增了两个命令 export 和 import ;
- export 命令用于规定模块的对外接口;
- import 命令用于输入其他模块提供的功能。
- 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。
- 如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。
- 下面是一个JS文件,里面使用export命令输出变量。
// math.js export const add = function (a, b) {return a + b } export const subtract = function (a, b) {return a - b }
- 使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。
// main.js import { add, subtract } from './math.js' add(1, 2) substract(3, 2)
-
定义暴露模块 : export
- 暴露一个对象:
- 默认暴露,暴露任意数据类型,暴露什么数据类型,接收什么数据类型
export default 对象 复制代码
- 暴露多个:
- 常规暴露,暴露的本质是对象,接收的时候只能以对象的解构赋值的方式来接收值
export var xxx = value1 export let yyy = value2 // 暴露一个对象 var xxx = value1 let yyy = value2 export {xxx, yyy}
- 暴露一个对象:
-
引入使用模块 : import
- default模块:
import xxx from '模块路径/模块名'
- 其它模块
import {xxx, yyy} from '模块路径/模块名' import * as module1 from '模块路径/模块名'
export 详细用法
-
export不止可以导出函数,还可以导出,对象、类、字符串等等;
-
暴露多个:
- 分别暴露
export const obj = {test1: ''} export const test = '' export class Test {constuctor() {} } // 或者,直接在暴露的地方定义导出函数或者变量 export let foo = ()=>{console.log('fnFoo');return "foo"},bar="stringBar"
- 一起暴露,推荐使用这种写法,这样可以写在脚本尾部,一眼就看清楚输出了哪些变量。
let a=1 let b=2 let c=3 export { a,b,c }
- 还可以通过as改变输出名称
// test.js let a = 1 let b = 2 let c = 3 export {a as test,b,c }; import { test, b, c } from './test.js' // 改变命名后只能写 as 后的命名
- 通过通配符暴露其他引入的模块
// test.js let a = 1 let b = 2 let c = 3 export {a as test,b,c }; // lib.js引入test.js的内容 export * from './test.js' // 引入 import {test,b,c} from './lib.js'
-
暴露一个对象,默认暴露
- export default指定默认输出,import无需知道变量名就可以直接使用
// test.js export default function () {console.log('hello world') } //引入 import say from './test.js' // 这里可以指定任意变量名 say() // hello world
- 常用的模块
import $ from 'jQuery' // 加载jQuery 库 import _ from 'lodash' // 加载 lodash import moment from 'moment' // 加载 moment
import详细用法
- import 为加载模块的命令,基础使用方式和之前一样
// main.js import { add, subtract } from './test'// 对于export default 导出的 import say from './test'
- 通过 as 命令修改导入的变量名
import {add as sum, subtract} from './test'
sum (1, 2)
- 加载模块的全部,除了指定输出变量名或者 export.default 定义的导入, 还可以通过 * 号加载模块的全部。
// math.js export const add = function (a, b) {return a + b } export const subtract = function (a, b) {return a - b }//引入 import * as math from './test.js' math.add(1, 2) math.subtract(1, 2)
ES6-Babel-Browserify使用教程
- 问题: 所有浏览器还不能直接识别ES6模块化的语法
- 解决:
- 使用Babel将ES6--->ES5(使用了CommonJS) ----浏览器还不能直接执行;
- 使用Browserify--->打包处理js----浏览器可以运行
- 定义package.json文件
{"name" : "es6-babel-browserify","version" : "1.0.0" }
- 安装babel-cli, babel-preset-es2015和browserify
npm install babel-cli browserify -g
npm install babel-preset-es2015 --save-dev
- 定义.babelrc文件,这是一个babel的设置文件
{"presets": ["es2015"] }
- 编码
// js/src/module1.js export function foo() {console.log('module1 foo()'); }; export let bar = function () {console.log('module1 bar()'); }; export const DATA_ARR = [1, 3, 5, 1];// js/src/module2.js let data = 'module2 data'; function fun1() {console.log('module2 fun1() ' + data); }; function fun2() {console.log('module2 fun2() ' + data); }; export {fun1, fun2};// js/src/module3.js export default {name: 'Tom',setName: function (name) {this.name = name} }// js/src/app.js import {foo, bar} from './module1' import {DATA_ARR} from './module1' import {fun1, fun2} from './module2' import person from './module3' import $ from 'jquery' //引入完毕 $('body').css('background', 'red') foo() bar() console.log(DATA_ARR); fun1() fun2() person.setName('JACK') console.log(person.name);
- 编译
- 使用Babel将ES6编译为ES5代码(但包含CommonJS语法) : babel js/src -d js/lib
- 使用Browserify编译js : browserify js/lib/app.js -o js/lib/bundle.js
- 页面中引入测试
<script type="text/javascript" src="js/lib/bundle.js"></script>
-
引入第三方模块(jQuery)
- 1). 下载jQuery模块:
npm install jquery@1 --save
- 2). 在app.js中引入并使用
import $ from 'jquery' $('body').css('background', 'red')
总结
模块化方案 | 优点 | 缺点 |
---|---|---|
commonJS | 复用性强; 使用简单; 实现简单; | 有不少可以拿来即用的模块,生态不错; 同步加载不适合浏览器,浏览器的请求都是异步加载; 不能并行加载多个模块。 |
AMD | 异步加载适合浏览器 | 可并行加载多个模块; 模块定义方式不优雅,不符合标准模块化 |
ES6 | 可静态分析,提前编译 | 面向未来的标准; 浏览器原生兼容性差,所以一般都编译成ES5; 目前可以拿来即用的模块少,生态差 |
AMD和CMD区别:
- 权威参考:github.com/seajs/seajs…
- 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。
- 不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
- CMD 推崇依赖就近,AMD 推崇依赖前置。
// CMD define(function(require, exports, module) { var a = require('./a');a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b.doSomething() // ... }) // AMD 默认推荐的是 define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ...})
- 虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。
- AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。
- 还有一些细节差异,具体看这个规范的定义就好,就不多说了。
参考:使用 AMD、CommonJS 及 ES Harmony 编写模块化的 JavaScript
链接:https://juejin.im/post/5cb004da5188251b130c773e
转载于:https://www.cnblogs.com/Antwan-Dmy/p/10714582.html
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- RequireJS
<script typetext/javascript src../scripts/lib/require.js data-main../scripts/main.js></script>首页index.html只需要引入requireJs库文件,并且指明入口函数main.js(data-main),它一般用来对requirejs进行配置,main.js内容如下:main.js…...
2024/4/21 6:35:39 - 许昌哪里做双眼皮好
...
2024/5/4 15:43:03 - angularjs ajax分页,angularJS插件:ngInfiniteScroll无限滚动加载数据(自动分页)
无限滚动(Infinite Scroll)也称为自动分页、滚动分页和无限分页。常用在图片、文章或其它列表形式的网页中,用来在滚动网页到页面底部的时候自动加载下一页的内容。这种形式最早由twitter使用,后来必应图片搜索、谷歌图片搜索、google reader等纷纷采用了…...
2024/4/20 19:04:32 - 品优购分页显示品牌
效果图 品牌列表分页的实现 3.1需求分析 在品牌管理下方放置分页栏,实现分页功能 3.2后端代码 3.2.1 分页结果封装实体 在pinyougou-pojo工程中创建entity包,用于存放通用实体类,创建类PageResult package com.pinyougou.entity;import…...
2024/4/20 19:04:30 - 菜鸟requireJS教程---2、基本知识
菜鸟requireJS教程---2、基本知识 一、总结 一句话总结: 1、requireJS中的api就define(比如定义自己的函数)和require 2、requireJS使用的话就是配置require.config(main.js中)和调用:require([jquery, ang…...
2024/4/20 19:04:29 - 李久恒深圳做双眼皮好价格
...
2024/4/21 6:35:39 - angularAMD快速入门
ngularAMD是作者 marcoslin 使用 RequireJS + AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web App.他特别适合快速开发SPA应用,适当的和更简单的方式。 我们整合AngularJS和RequireJS不应该是复杂的,它不是angularAMD。在行动…...
2024/4/21 6:35:43 - jQuery Pagination分页插件
最近做官网的优化,因为之前官网是静态页面,但是这次需要从数据库中查询然后做展示。又不想引人angular使其开发笨重,所以就用jquery来实现,分页使用的是jQuery Pagination。以前项目中也有过一些分页插件,但是都比较固…...
2024/4/21 6:35:37 - AngularJs分页插件
angularUI bootstrap提供的分页插件满足了大部分应用的需求。 地址http://angular-ui.github.io/bootstrap/#/pagination 在项目需求中,新增了两个需求: 1.自由设定每页显示的条目; 2.可以手动输入页面,跳转到指定的页数。 html…...
2024/4/21 6:35:35 - 双眼皮埋线吧
...
2024/4/21 6:35:34 - AnglarJS(二)分页插件使用
1.引入分页js,css插件 1)在js中引入 <!-- 分页组件开始 --> <!--css--> <link rel"stylesheet" href"../plugins/angularjs/pagination.css"> <!--js--> <script src"../plugins/angularjs/pagin…...
2024/4/21 6:35:33 - Angularjs中使用jquery分页控件
【摘要】 分页是前端数据展示的常用功能,而在我们使用的Angularjs中,原生的分页需要将数据全部取到前端后,然后再到前端分页,在大批量数据操作时并不实用。在本文中,介绍了将一种jquery的分页控件修改为Angularjs指令的…...
2024/4/21 6:35:33 - 割双眼皮之前的准备
...
2024/4/21 6:35:32 - 双眼皮手术后多久拆线
...
2024/4/20 14:25:29 - angular ui-grid 表格插件配置项
angular ui-grid 表格插件配置项 ui-grid是英文文档,我总结了一些常用配置项 $scope.gridOptions {data:$scope.data//请求来的数据放入$scope.data中columnDefs:[{name:,displayName:,enableColumnMenu:false,width:,cellTemplate:"<div></div>…...
2024/4/21 6:35:30 - 单元测试与集成测试
软件测试分类 按测试用例的设计方法,软件测试分为白盒测试和黑盒测试。按测试策略和过程,软件测试分为单元测试、集成测试、确认测试和系统测试。按软件系统工程,测试是软件质量保证的最后的一关。 高质量的程序取决于以下几个方面: 高质量的设计规范的编码有效的测试 开发…...
2024/5/3 1:45:49 - AngularJS+分页插件的使用
报错: 分页插件换行 逻辑没有错,是css没有加载上,少了style 页面报404后台没有报错 web.xml没有配置 ng-app的作用 ng-app 指令 作用是告诉子元素以下的指令是归AngularJS 的,AngularJS 会识别的,比如在<tr>标签中添加ng-app后整个tr标签AngularJS 都会生效 ng-app 指令…...
2024/5/3 8:40:07 - 多条件模糊分页查询(angular+primeng+springboot)
在实现了分页查询后,我原本的项目之前的模糊查询失效,之前是传一个封装好的实体对象给后端,后端通过这个对象查询后返回结果给到前端。由于实现了分页,所以查询得到的结果也需要分页。 有个很关键的问题是分页需要传pageNum和pag…...
2024/4/21 6:35:26 - 前台搜索结果分页(Angular,Solr)
管理后台的分页使用的是分页控件。对于后台其实无所谓,他那个分页控件做得好看还是丑啊,对于用户来说并不会很重要,因为他是放到后台的。但是如果说你要放到前台的话,我们还是要讲究一下整个页面的美感。这个时候肯定是要自己来实…...
2024/4/21 6:35:25 - angular7中使用swiper轮播图插件
swiper中文官网 https://www.swiper.com.cn/ 安装 插件 npm / cpm npm install swiper --save || yarn add swiper --save npm install types/swiper --save || yarn add types/swiper --save配置 angular.json "styles": ["src/styles.scss","s…...
2024/4/21 6:35:25
最新文章
- 数据丢失不慌张,手机数据恢复一键解决!
如今手机已经成为我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。随着使用时间的增加,手机数据丢失的问题也时常发生。那么手机数据恢复有哪些方法呢?面对这种情况,先不要慌张,本文将…...
2024/5/8 18:24:15 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)
目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树:对于二叉搜索树中的每个结点,其左子结点的值小于该结点的值,而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…...
2024/5/7 2:59:11 - 设计模式9--单例模式
定义 案例一 案例二 优缺点...
2024/5/8 8:40:30 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心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