Angualr

一、目录结构

“assets”: [ 存放静态资源目录 “src/favicon.ico”,“src/assets”]

“index”: “src/index.html”, 单页面,打包编译结果出口

“main”: “src/main.ts”, 整个模块化系统启动的入口,其作用为:加载根模块,启动执行模块系统,为整个系统的程序入口。

package.json:项目包说明文件,文件中有scripts字段,左边是简易命令,右边是等效的执行程序,即在终端输入 npm run start 和 ng serve均会执行编译程序:

 "scripts": {   "ng": "ng", 运行查看Angular CLI脚手架工具使用帮助   "start": "ng serve", 运行开发模式    "build": "ng build", 运行项目打包构建(用于发布到生成环境)  "test": "ng test", 运行karma单元测试    "lint": "ng lint", 运行TypeScripts代码校验   "e2e": "ng e2e", 运行protractor端到端测试  "npm run pc:start": 启动pc-fe项目}

二、组件

在这里插入图片描述

Component(组件)是整个框架的核心 ,“组件化”的可以用来解耦、复用。

app.component.ts就是一个组件,在Angular中组件就是一个类 。

  • @Component为组件的装饰器,用来修饰组件的一些特性,里面包含组件的元数据Metadata;

  • selector 用来定义组件的名字

  • templateUrl用来指定组件对应的html模板文件

  • styleUrls用来存放css文件

  • styleUrls是一个数组,用来存放组件相关的样式文件

    组件方法中,直接通过this访问组件成员
    在这里插入图片描述

创建组件的方法:

ng generate component 组件名

三、模块

NgModule(模块)是组织业务代码的利器,按照自己的业务场景,把组件、服务、路由打包到模块里面,形成一个个的积木块,然后用这些积木块来搭建出高楼大厦,app.module.ts就是模块文件,里面是这样的:
在这里插入图片描述

  • exports: [RouterModule] 导出RouterModule,以便它在整个应用程序中生效。
  • declarations:声明并组装模块资源:组件、指令、服务;该应用所拥有的组件。 声明这里面有什么
  • imports:app模块需要依赖其他的模块,如BrowserModule等;
  • bootstrap:指定启动的根组件;
  • providers:各种服务提供者。

四、元数据

@Component被称为元数据,用于描述类相关的功能模块和组件的一些信息

五、数据绑定和指令

MVVM思想(数据驱动视图),通过特殊的{{}}语法将数据绑定到DOM元素,当数据改变的时候会影响视图的更新。

循环指令:*ngFor

条件判断指令:*ngIf

表单控件双向绑定指令:[(ngModel)],需要导入

import { FormsModule } from '@angular/forms';
imports:[ FormsModule]

六、服务

服务指的是针对某个单一或系统功能的封装,包括值、函数或应用所需的功能,例如在Angular核心包里面,最典型的一个服务就是http服务。典型的服务是一个类,具有专注的、明确的用途,应该做一件特定的事情,并把它做好。例如,日志服务,和服务端接口交互的服务等

七、依赖注入

依赖注入是提供类的新实例的一种方式,负责处理好类所需的全部依赖。大多数依赖都是服务。Angular使用依赖注入来提供新组件以及组件所需的服务。Angular重要的特性和服务:动画、表单、HTTP、组件生命周期、管道过滤器、路由和测试。

Ng Docs

一、常规用法:

1插值表达式

 <p>{{byObject.centence}}</p><p>{{byArray[0]}}</p>
 byObject = { centence: '我是对象的值' };byArray = ['我是数组的0号元素'];

2绑定机制

  • 属性-从数据源到视图(单向) 插值表达式 []
  • 事件-从视图到数据源(单向) ()
  • 表单值-从视图到数据源再到视图(双向) [()]
<span [ngClass]="className">
<!-- 这里的ngClass等同于 class="{{className}}" -->
<some-element [ngClass]="['first', 'second']">...</some-element><some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element><some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element>
<div><p>案例1:使用模版引用变量(脱离数据源)</p><input style="width: 125px" nz-input #age placeholder="请输入你的年纪" /><button (click)="showMsg(age.value)" nz-button nzType="primary">弹出模板引用变量的内容</button>
</div>

input输入框输入值,age将input框进行标记,button通过点击函数取到age.value即input框内的值

<div><p>案例4:既有单向绑定又有双向绑定</p><input style="width: 125px" nz-input [(ngModel)]="centence"/><button (click)="showMsg(centence)" nz-button nzType="primary">弹出双向绑定的内容</button>
</div>

[(ngModel)]进行数据双向绑定,input框中的值会传给contence,button键点击触发showMsg函数,此时展示的值是经过变化后的contence

可选链:

意义:有就用,没有就不用

例子:

我是{{user.name}}, 我的房子所在地为{{user.house?.location}}

没有就显示:我是谁谁谁,我的房子所在地为

有就显示:我是谁谁谁,我的房子所在地为上海大别墅

二、指令

ng-content

父传子,将父类html嵌入到子类中,就是父类html中有一段代码需要动态生成,相当于vue中的插槽slot。

父组件:

<h1>父组件</h1>
<input [(ngModel)]="sentence" name="sentence" class="sentence">
<stomach><div>{{sentence}}</div><p>所谓的不公,只是不符合人类社会法则</p><span class="className">却符合因果关系</span>
</stomach>

子组件

<h1>子组件</h1>
<!--ng-content父类嵌入子类-->
<ng-content select="p"></ng-content>
<ng-content select="span"></ng-content>
<ng-content></content>
<ng-content select="p"></ng-content>

ng-container

ng-container只是一个分组元素, 它的特点就是在渲染页面时, 自身不加入DOM.你可以使用浏览器的开发者工具, 查看运行结果中的这句话, 是否只有p标签包围.

 <ng-container><p>轻流招聘啦~详情请戳https://github.com/Eve-Sama</p></ng-container><ng-container><p>自身不加入dom,只是分组元素</p></ng-container>

ng-template

ng-template是Angular 结构型指令中的一种,用于定义模板渲染HTML(模板加载)。定义的模板不会直接显示出来,需要通过其他结构型指令(如 ng-if)或 template-ref 将模块内容渲染到页面中。

今天吃点啥?
<ng-template [ngIf]="true">吮指原味鸡
</ng-template>

概述

一共有三种类型的指令:

  • 组件-拥有模板的指令
  • 结构型指令-通过添加和移除 DOM 元素改变 DOM 布局的指令
  • 属性型指令-改变元素、组件或其他指令的外观和行为的指令

结构性指令

以*开头,如*ngIf,*ngFor,否则为属性型指令,如ngClass,ngStyle等

*ngFor中有以下几种模板变量:

  • index: number:遍历时的序号, 下标从0开始
  • first: boolean:若为第一个元素则返回true, 否则返回false
  • last: boolean:若为最后一个元素则返回true, 否则返回false
  • even: boolean:若为偶数元素则返回true, 否则返回false
  • odd: boolean:若为奇数元素则返回true, 否则返回false
<table><thead><tr><th>序号</th><th>姓名</th><th>籍贯</th><th>第一条记录</th><th>最后一条记录</th><th>偶数记录</th><th>奇数记录</th></tr></thead><tbody><tr *ngFor="let obj of ngForData;let index = index;let first = first;let last = last;let even = even;let odd = odd;"><td>{{index}}</td><td>{{obj.name}}</td><td>{{obj.gender}}</td><td>{{obj.hometown}}</td><td [ngClass]="{'high-light-true':first,'high-light-false':!first}">{{first}}</td><td [ngClass]="{'high-light-true':last,'high-light-false':!last}">{{last}}</td><td [ngClass]="{'high-light-true':even,'high-light-false':!even}">{{even}}</td><td [ngClass]="{'high-light-true':odd,'high-light-false':!odd}">{{odd}}</td></tr></tbody>
</table>

trackBy

Angular默认是以对象为标记的, 一旦你更新数据源, Angular便更新视图.更新时, 先移除全部DOM结点, 再依次添加DOM结点.DOM的操作非常消耗性能, 因此, *ngFor提供 trackBy来帮助用户自定义追踪函数算法.

就是用*ngFor循环更新遍历数据时,更新整个dom树,但有时候我们只是需要更新一小部分内容,那么此时我们利用trackby进行数据追踪,就可以提高效率。

<ul><Li *ngFor="let obj of cities; trackBy:trackByCity">{{obj.name}}</Li>
</ul>
<button (click)="UpdateCities()" nz-button>获取数据</button>
<button (click)="ResetCities()" nz-button>还原数据</button>

自定义结构型指令

  • 导入并添加Directive装饰器
  • 导入input,TemplateRef,ViewContainRef
  • 设置选择器,以便Angualr解析指令
  • 在AppModule的declarations中声明

关于自定义结构型指令需要预先了解以下三个概念:
**TemplateRef:**表示内嵌的HTML模板.
**ViewContainerRef:**表示视图容器, 创建和管理内嵌视图.

**依赖注入:**将控制权交给了父组件

    //1import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';import {Directive,Input,TemplateRef}//2@Directive({selector: '[nssMilkTeaType]'})export class NssMilkTeaDirective {//3constructor(private templateRef: TemplateRef<any>,private viewContainer: ViewContainerRef) {}//设置type方法,里面的type是它的一个string属性@Input('nssMilkTeaType') set type(type: string) {if (type === 'oreo') {this.viewContainer.clear();//清除所有内嵌视图this.viewContainer.createEmbeddedView(this.templateRef);//创建内嵌视图} else if (type === 'redBean') {this.viewContainer.clear();this.viewContainer.createEmbeddedView(this.templateRef);this.viewContainer.createEmbeddedView(this.templateRef);} else if (type === 'matcha') {this.viewContainer.clear();this.viewContainer.createEmbeddedView(this.templateRef);this.viewContainer.createEmbeddedView(this.templateRef);this.viewContainer.createEmbeddedView(this.templateRef);}}}

属性型指令

ngClass:

相当于css中的class选择器

ngStyle:

相当于直接在里面写样式

ngSwitch:

ngSwitch设定了一个参数变量, 当参数变量与 *ngSwitchCase的值一致时, 显示其DOM元素, 否则移除.当所有 *ngSwitchCase都无法匹配时, 则显示 *ngSwitchDefault的DOM元素

<nz-radio-group [(ngModel)]="hobby"><label nz-radio nzValue="sweet">我喜欢吃甜的</label><label nz-radio nzValue="salty">我喜欢吃咸的</label><label nz-radio nzValue="yummy">只要好吃就行</label>
</nz-radio-group>
<div [ngSwitch]="bobby"><p>生活就需要甜甜的味道!</p><p>咸一点的食物才叫美食,其他的只能叫吃的!</p><p>只要是好吃的我都喜欢!</p>
</div>

自定义属性型指令

  • 导入并添加 Directive装饰器
  • 导入 Input, ElementRef
  • 设置选择器, 以便Angular解析指令
  • 在AppModule的 declarations 中声明

三、路由

router-outlet

侧边栏和顶部导航栏是不变的, 只有内容区是在变化的.如本项目, 左侧菜单好像是固定在那边的, 右边内容区却是会变化的.这是如何实现的呢?

实际上, 右边就是个 router-outlet, 字面意思是路由出口, 告诉路由模块, 需要加载的页面需要放在哪个地方.

routerLink

路由的跳转, 很多时候是由用户在应用界面上的操作导致的, 那么当用户需要跳转页面的时候, 需要加上跳转链接.在以前, 我们可能是这样写的

   <a href="../project/author">关于作者</a>//a标签中的href变成routerlink<a routerLink="/project/author">关于作者</a>

Routes数据结构

import { Routes } from '@angualr/router';
const routes: Routes = [{path: 'demo1',component:Demo1Component },{path: 'demo2',component:Demo2Component },//默认导航路径. {path: '',   redirectTo: '/demo1', pathMatch: 'full' },{path: '**', component: PageNotFoundComponent }
]
  • path - 路径, 用来匹配路由的名字 ,’**'是指任何路径都可以匹配到的路径, 通常用来放置404页面, 比如用户恶意修改路径, 但实际上并没有对应的路径.
  • component - 组件名, 对应路径指向的组件名
  • redirectTo - 重定向指向的路径, 当匹配到这个路径时转发请求给重定向的路径
  • pathMatch - 路径匹配模式

**pathMatch:**通常设置为 full.其值还有一种可能是 prefix, 是指前缀匹配.思考一下, 当 path 值为 ‘’ 时, 为什么必须指明 pathMatch为 full?观察以下URL.

angular.ink
angular.ink/demo1

这三个URL都是以 angular.ink开头的, 这个是根域名, 那么三个都可以匹配到, 所以, 默认路径必须是 full的匹配模式.

异步路由

就是假如登录模块有两个身份界面,一个是admin,一个是user,那么当admin访问时就不需要加载user,当user访问时不需要加载admin,这就是异步路由,这样可以大大提高加载速度。

例如一个线上超市系统:

apppagespages-routing.module.tsuserbrowse-productbrowse-product.component.tsbuy-productbuy-product.component.tsuser-router.module.tsuser.module.tsadminmanage-productmanage-product.component.tsoperator-recordoperator-record.component.tsadmin-router.module.tsadmin.module.ts 

pages:

  • pages-routing.module.ts - 总的模块路由

  • user-router.module.ts(admin-router.module.ts) - 具体模块路由, 决定哪些路径能够匹配到user(admin)的哪些页面

  • user.module.ts(admin.module.ts) - 模块声明, 组件、管道、服务等需要在此声明, 才可以被此模块使用

    user-router.module.ts

import {NgModule} from '@angualr/core';
import {Routes,RouterModule} from '@angualr/router';
import {BrowseProductComponent} from './browse-product/browse-product.component';
import { BuyProductComponent } from './buy-product/buy-product.component';const routes:Routes = [{path: 'browse-product',component: BrowseProductComponent},{path: 'buy-product',component: BuyProductComponent}
];@NgModule({imports: [RouterModule.forChild(routes)],exports: [RouterModule]
})export class UserRoutingModule{}

user.module.ts

import {NgModule} from '@angular/core';
import {Routes,RouterModule} from '@angualr/router';
import {BrowseProductComponent} from './browse-product/browse-product.component';@NgModule({imports: [UserRoutingModule,],declaration:[BrowseProductComponent,BuyProductComponent]
})
export class UserModule{}

admin-router.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ManageProductComponent } from './manage-product/manage-product.component';
import { OperatorRecordComponent } from './operator-record/operator-record.component';const routes:Routes = [{path: 'manage-product',component:ManageProductComponent },{path: 'operator-record',component:OperatorRecordComponent}
];@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})export class AdminRoutingModule{}

admin.module.ts

import { NgModule } from '@angular/core';
import { AdminRoutingModule } from './angular-routing.module';
import { ManageProductComponent } from './manage-product/manage-product.component';
import { OperatorRecordComponent } from './operator-record/operator-record.component';@NgModule({imports:[AdminRoutingModule,]declarations:[ManageProductComponent,OperatorRecordComponent]
})
export class AdminModule { }

pages-routing.module.ts

  import { NgModule } from '@angular/core';import { Routes, RouterModule } from '@angular/router';const routes: Routes = [{path: '',children: [{ path: '', redirectTo: '/user/browse-product', pathMatch: 'full' },{ path: 'user', loadChildren: './user/user.module#UserModule' },{ path: 'admin', loadChildren: './admin/admin.module#AdminModule' },{ path: '**', redirectTo: '/user/browse-product' },],}];@NgModule({imports: [RouterModule.forRoot(routes, { useHash: false })],exports: [RouterModule],})export class PagesRoutingModule {}

路由传参

原页面:

<button (click)="navigate()">携转跳转</button>navigate(){this.router.navigate(['/angualr/params-router'],{queryParams:{name:'前夕',words:‘最美的是相逢,最难的是重逢’}})
}

跳转后的:

<div class="center"><h1>{{name}}</h1><h2>{{words}}<h2>
</div>
activatedRoute.queryParams.subscribe(queryParams =>{this.name = queryParams.name;this.words = queryParams.words;
})

CanActivate

很多时候, 并不是所有人都可以访问所有页面的.最典型的应用场景是普通用户并不能访问管理员的操作页面.那么我们就需要在用户访问时判断这个用户到底是否有相应的权限.路由配置文件提供了一个接口 CanActivate用来处理验证的业务.有时候这些安全措施也被称为路由守卫.

{ path: 'params-router-true', component: ParamsRouterComponent, canActivate: [AuthGuardTrue] },

CanDeactivate

在一些表单编辑页面, 如果用户辛辛苦苦输入了半天, 却不小心点到导航按钮, 跳转到了其他页面, 丢失了未保存的数据, 这样的用户体验是非常糟糕的.所以, Angular提供了 CanDeactivate接口, 在跳转路由之前触发, 以提醒用户, 或者做一些业务上的保存等操作.

CanActivateChild则用来保护子路由. CanLoad则是用来保护子模块的, 未经允许, 不加载子模块.

预加载

我们知道, 使用异步路由后, 各自的路由模块只有在初次访问时才会加载.而实际上, 在页面初次加载后, 进入默认路由模块, 用户通常需要停留一会, 这个时候继续加载其他模块是比较合适的, 这样做有两个非常显著的好处.

  • 初次加载并没有加载默认路由模块, 提高加载速度
  • 当用户访问其他模块时, 不会出现卡顿, 因为已经预加载了

只需要在模块配置处添加以下代码即可

@NgModule({imports: [RouterModule.forRoot(routes,{useHash:false,preloadingStategy:PreloadAllModules //开启预加载})],exports:[RouterModule],
})

四、服务

一般用于写获取数据的业务逻辑

  • 组件级注册, 在 @Component当中的 providers数组当中引入服务
  • 模块级注册, 在 @ngModule当中的 providers数组当中引入服务

当组件需要使用服务时, 都需要将服务引入组件内并在构造函数中声明.

组件级注册:

import { XxxService } from './xxx.service';
//组件之间相互独立
@Component({providers: [XxxService]
})

模块级注册:

import { XxxService } from './xxx.service';
//组件之间数据共享
@NgModule({providers:[XxxService]
})

基础用法:

在概述当中, 我们提到了服务的应用场景, 那么, 我们现在来实现这样一个登录功能.

  • 设计一份表单来采集账号和密码, 点击登录后验证用户身份
  • 当帐号为’admin’, 密码为’123456’时, 登录成功, 否则登录失败
<input nz-input #userName name="userName" placeholder="用户名,默认admin">
<input nz-input #password name="password" placeholder="密码,默认123456">
<button (click)="login(userName.value,password.value)" nz-button nzType="primary">登录</button>
import {Injectable} from '@angular/core';
@Injectable()
export class LoginService{login(userName: string, password: string): boolean {if (userName === 'admin' && password === '123456') {return true;}return false;}
}
    import { Component } from '@angular/core';import { LoginService } from './service/demo.service';import { NzMessageService } from 'ng-zorro-antd/message';@Component({templateUrl: './service.component.html',styleUrls: ['./service.component.scss'],providers: [LoginService]})export class ServiceComponent {constructor(private loginService: LoginService) { }login(userName, password) {if (this.loginService.login(userName, password)) {this.nzMessageService.info('登录成功!');} else {this.nzMessageService.error('登录失败!');}}}

组件级注册提供商

组件级注册最大的作用就是组件之间的数据不会相互影响

举个栗子:

  • 设计一个服务, 服务内部有一个字段初始值为0, 定义一个方法, 可以自增这个字段并且弹出显示(alert, 在案例中使用的antd样式)
  • 设计父子组件, 在父子组件中均注册这个服务并且调用这个服务的方法.但是各自的数据互不影响
import { Injectable } from '@angular/core';
import { NzMessageService } from 'ng-zorro-antd/message';@Injectable()
export class ComponentService{constructor(private nzMessageService: NzMessageService){}value = 0;add(){this.value++;this.nzMessageService.info(this.value.toString());}
}
<h1>父组件</h1>
<button (click)="addAndShowComponent"  nz-button nzType="primary">自增且显示</button>
<component-child></component-child>

父组件ts

  import { Component } from '@angular/core';import { ComponentService } from './service/demo.service';@Component({templateUrl: './service.component.html',styleUrls: ['./service.component.scss'],providers: [ComponentService]})export class ServiceComponent{constructor(private componentService:ComponentService{})addAndShowComponent(){this.componentService.add();}}

子组件html

<h1>子组件</h1>
<span><button (click)="addAndShow()" nz-button nzType="primary">自增且显示</button>
</span>

子组件ts

   import { Component } from '@angular/core';import { ComponentService } from '../../service/demo.service';@Component({selector: 'component-child',templateUrl: './component-child.component.html',styleUrls: ['./component-child.component.scss'],providers: [ComponentService]})export class ComponentChildComponent {constructor(private componentService: ComponentService) { }addAndShow() {this.componentService.add();}}

模块级注册提供商

和组件级注册相反,模块级注册要求服务内部之间共享数据

//服务
import { Injectable } from '@angular/core';
import { NzMessageService } from 'ng-zorro-antd/message';@Injectable()
export class RootService{constructor(private nzMessageService:NzMessageService){}value = 0;add(){this.value++;this.nzMessageService.info(this.value.toString());}
}
//服务注册,写在根组件内
import { RootService } from './service/service/demo.service';@NgModule({providers:[RootService]
})export class AngualrModule{}//这是我的模块名
//父组件样式
<h1>父组件</h1>
<button (click)="addAndShowRoot()" nz-button nzType="primary">自增且显示</button>
<service-child></service-child>
   //父组件tsimport { Component } from '@angular/core';import { RootService } from './service/demo.service';@Component({templateUrl: './service.component.html',styleUrls: ['./service.component.scss']})export class ServiceComponent {constructor(private rootService: RootService) { }addAndShowRoot() {this.rootService.add();}}
    //子组件html<h1>子组件</h1><span><button (click)="addAndShow()" nz-button nzType="primary">自增且显示</button></span>
   //子组件tsimport { Component } from '@angular/core';import { RootService } from '../../service/demo.service';@Component({selector: 'service-child',templateUrl: './service-child.component.html',styleUrls: ['./service-child.component.scss']})export class ServiceChildComponent {constructor(private rootService: RootService) { }addAndShow() {this.rootService.add();}}

五、组件

父组件调用子组件方法

父组件需要调用子组件的方法, 这里分为两种调用方式, 一种是 实例调用, 一种是 类调用. 。

这里需要使用 ViewChild将子组件注入到父组件的数据源. ViewChild相当于影分身,可以拥有原先子组件的属性和方法.在 类调用 的案例中, child-communication的标签即使不写, 也可以调用子组件的方法

类调用

在这个案例中, 子组件有个输入框, 点击子组件的按钮可以正常弹出值.但是点击父类, 也能弹出信息, 但是却无值, 这是为什么?
这是因为在父组件的数据源中, 对子组件的引用使用的是 类调用, 即参数都是子组件的类名. Angular只能知道你有这个子组件, 但是无法定位你子组件所在的位置, 是不是这个道理?所以自然无法取得子组件的动态成员变量.

父组件html

<h1>我是父组件</h1>
<button (click)="callChildFunction2()" nz-button nzType="primary">调用子组件方法</button>
<child-communication></child-communication>

父组件ts

@ViewChild(ChildCommunicationComponent) private childComponent: ChildCommunicationComponent;
callChildFunction2(){this.childComponent.childFunction2();
}

子组件html

<h1>我是子组件</h1>
<input nz-input class="input" [(ngModel)]="childValue2" name="childValue2" placeholder="子组件的输入框">
<button (click)="childFunction2()" nz-button nzType="primary">调用方法</button>

子组件ts

childValue2;
childFunction2(){this.messageService.info(this.childValue2);
}

实例调用

给子组件加上模板引用变量确定子组件在dom树中的位置

<h1>我是父组件</h1>
<button (click)="callChildFunction3()" nz-button nzType="primary">调用子组件方法</button>
<child-communication #child></child-communication>
 @ViewChild('child') private childComponent2: ChildCommunicationComponent;callChildFunction3() {this.childComponent2.childFunction3();}

子组件给父组件传值

在父组件传值给子组件的时候, 其实是通过指令的方式完成的.但是使用指令的前提, 是被传值者是一个标签, 这符合了父组件传值给子组件的条件.
但是子组件显然不可能包含父组件的标签, 所以并不能通过这种方式完成传值.在开始演示之前, 先了解以下几个概念:

  1. output用于外部访问, 也就是说, 将其暴露给外部, 允许外部使用
  2. EventEmitter是Angular的事件发射器, 暂时理解为事件的一个大类

观察代码和运行结果, 可以看到, 子组件中, 在点击按钮后, 触发点击事件, 调用 childFunction4()方法, 在这个方法中, 使用事件发射器 this.event.emit()触发事件, 将值(案例中弹的是一个对象)弹出.

<h1>我是父组件</h1>
<input nz-input class="input" [(ngModel)]="name" placeholder="姓名">
<input nz-input class="input" [(ngModel)]="bornYear" placeholder="出生年月">
<child-communication (event)="showInfo($event)"></child-communication>
//父组件ts
name;
bornYear;
showInfo($event) {this.name = $event.name;this.bornYear = $event.bornYear;
}
<h1>我是子组件</h1>
<input nz-input class="input" [(ngModel)]="name" name="name" placeholder="姓名">
<input nz-input class="input" [(ngModel)]="bornYear" name="bornYear" placeholder="出生年月">
<button (click)="childFunction4()" nz-button nzType="primary">传值给父组件</button>

每一个Subject都是一个Observable(可观察对象),对于一个Subject,你可以订阅(subscribe)它,Observer会和往常一样接收到数据,

每一个Subject也可以作为Observer(观察者) Subject同样也是一个由next(v)error(e),和 complete()这些方法组成的对象。调用next(theValue)方法后,Subject会向所有已经在其上注册的Observer多路推送theValue

service

import {Injectable} from '@angualr/core';
import {Subject} from 'rxjs';
@Injectable()
export class CommunicationService{// 声明两个Subject并定义接收数据类型,在本案例中是一个对象private father = new Subject<{drink,eat}>();private child = new Subject<{drink,eat}>();// 将Subject转化为Observablefather$ = this.father.asObservable();child$ = this.child.asObservable();//将变化的值,,发送给订阅者fatherSend(value: {drink,eat}){this.father.next(value);}childSend(value: {drink,eat}){this.child.next(value);}
}

父组件html

 <h1>父组件</h1><input nz-input class="input" [(ngModel)]="drink" name="drink" placeholder="最爱喝的饮料"><input nz-input class="input" [(ngModel)]="eat" name="eat" placeholder="最爱吃的甜点"><button (click)="transferDataByService()" nz-button nzType="primary">传值给子组件</button><child-communication></child-communication>

父组件ts

    import { CommunicationService } from './service/communication.service';import { Subscription } from 'rxjs';@Component({templateUrl: './component-communication.component.html',styleUrls: ['./component-communication.component.scss'],providers: [CommunicationService]})export class ComponentCommunicationComponent implements OnDestroy {subscription: Subscription;constructor(private communicationService: CommunicationService) {this.subscription = communicationService.child$.subscribe(value => {this.drink = value.drink;this.eat = value.eat;});}drink = '奶茶';eat = '泡芙';transferDataByService() {this.communicationService.fatherSend({ drink: this.drink, eat: this.eat });}ngOnDestroy() {this.subscription.unsubscribe();}}

子组件html

 <h1>子组件</h1><input nz-input class="input" [(ngModel)]="drink" name="drink" placeholder="最爱喝的饮料"><input nz-input class="input" [(ngModel)]="eat" name="eat" placeholder="最爱吃的甜点"><button (click)="transferDataByService()" nz-button nzType="primary">传值给父组件</button>

子组件ts

    import { Subscription } from 'rxjs';@Component({selector: 'child-communication',templateUrl: './child-communication.component.html',styleUrls: ['./child-communication.component.scss']})export class ChildCommunicationComponent implements OnDestroy {subscription: Subscription;constructor(private communicationService: CommunicationService) {this.subscription = communicationService.father$.subscribe(value => {this.drink = value.drink;this.eat = value.eat;});}drink;eat;transferDataByService() {this.communicationService.childSend({ drink: this.drink, eat: this.eat });}ngOnDestroy() {this.subscription.unsubscribe();}}

Service通常有2个作用
一个是网络请求的存放
另外个作用是集中处理业务, 主要是与视图无关的一些处理. 这类Service则按需注入

如果只是子孙的通讯不涉及其他的数据传递,就可以用emit

组件样式

父子组件样式相互不影响

父组件html

<h1>父组件</h1>
<span class="color bgColor">父组件的内容</span>
<child-styles1></child-styles1>

父组件css

.bgColor{background-color:red;
}

子组件html

<h1>子组件</h1>
<span class="color bgColor">子组件的内容</span>

子组件css

.color{color:blue;
}

给子组件添加边界

:host(.selector)

:host, 意味着在整个子组件的根元素上添加样式,selector表示只有子组件根元素上存在这个选择器类名selector的组件才应用这个样式

<h1>父组件</h1>
<child-style2 class="first-element"></child-style2>
:host(.first-element){display:block;border: 1px solid red;
}

刺穿选择器

::ng-deep

当父组件包含子组件时,原则上各自的样式互不污染,非要进行污染时,则使用该选择器

this.drink = value.drink;
this.eat = value.eat;
});
}
drink;
eat;
transferDataByService() {
this.communicationService.childSend({ drink: this.drink, eat: this.eat });
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}


Service通常有2个作用
一个是网络请求的存放
另外个作用是集中处理业务, 主要是与视图无关的一些处理. 这类Service则按需注入如果只是子孙的通讯不涉及其他的数据传递,就可以用emit### 组件样式父子组件样式相互不影响**父组件html**```html
<h1>父组件</h1>
<span class="color bgColor">父组件的内容</span>
<child-styles1></child-styles1>

父组件css

.bgColor{background-color:red;
}

子组件html

<h1>子组件</h1>
<span class="color bgColor">子组件的内容</span>

子组件css

.color{color:blue;
}

给子组件添加边界

:host(.selector)

:host, 意味着在整个子组件的根元素上添加样式,selector表示只有子组件根元素上存在这个选择器类名selector的组件才应用这个样式

<h1>父组件</h1>
<child-style2 class="first-element"></child-style2>
:host(.first-element){display:block;border: 1px solid red;
}

刺穿选择器

::ng-deep

当父组件包含子组件时,原则上各自的样式互不污染,非要进行污染时,则使用该选择器

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

相关文章

  1. 2、Angular 2环境搭建

    这系列文章都是通过大漠孤烟的视频教程整理而来&#xff0c;挂个翻译标签不会被说什么侵权吧&#xff01; Angular 2环境搭建 安装node 见下方nodejs&&npm安装 安装完成node之后&#xff0c;就会自然有npm包管理器&#xff0c;但是我们搭建Angular 2的开发环境需要安…...

    2024/4/21 4:15:06
  2. angular2学习——项目构建以及基本知识介绍

    1、项目构建 第一步&#xff1a;全局安装 Angular CLI 。 npm install -g angular/cli 第二步&#xff1a;创建新项目 ng new my-app 第三步&#xff1a;启动开发服务器 cd my-app ng serve --open 项目构建会遇到安装错误的一些问题&#xff0c;重现按照教程重新安装就…...

    2024/4/21 4:15:05
  3. angular 服务器交互get post jsonp

    angular请求服务get() post() jsonp() 1.引入需要使用的模块HttpClientModule 另外一种方式&#xff0c;实现跨域访问要用HttpClientJsonpModule模块 2.构造入参调用对应的方法。 代码&#xff1a; https://github.com/wp1993/personalCode/tree/682516abcb2583e792b89f80c…...

    2024/4/21 4:15:03
  4. angular中创建Web服务器----angualr总结

    前言&#xff1a;之前做Angular项目的时候&#xff0c;都是自己创建一个自己设置一个端口登录的&#xff0c;那么 如何自己创建一个服务器没呢&#xff1f;下面和大家分享一下angualr中自己创建服务器的步骤。 1.初始化文件夹 cnpm -y 2.引入node类型定义文件 在typescript…...

    2024/4/27 20:59:55
  5. angular 服务器渲染_带有Angular Universal的Angular 2中的服务器端渲染

    angular 服务器渲染Server-side rendering is a headache and if you ever worked with Angular 1, you should be worried about how Angular 2 plans to handle it. Server-side rendering in Angular 2 is often-times also called Universal. 服务器端渲染令人头疼&#x…...

    2024/4/21 4:15:01
  6. Angular2-关闭占用的4200端口

    1.打开cmd 》 cd c:\Windows\System32 》c:\Windows\System32>netstat -ano | findstr :4200 TCP 127.0.0.1:4200 0.0.0.0:0 LISTENING 10188 》c:\Windows\System32>TaskKill.exe /F /PID 10188 关闭10188进程&#xff0c;相当于已经停用…...

    2024/4/21 4:15:01
  7. angular常用功能

    1、angular的强大的表单验证 &#xff08;1&#xff09;、表单必须有form标签&#xff0c;并且form标签上必须有一个name属性 &#xff08;2&#xff09;、form中不能有action属性。提交交由ng-submit处理 &#xff08;3&#xff09;、input标签一定要有ng-model以及name属性…...

    2024/4/21 4:14:59
  8. Angular8 ☆ 常用的Angular-Cli命令

    一、常用的angular-cli命令 Angular前端开发的时候&#xff0c;首先安装node.js&#xff0c;安装好之后就可以使用npm命令安装Angular-cli&#xff0c;这是一个用于操作angular框架快速生成项目&#xff0c;模块&#xff0c;组件等的便捷的客户端。 安装命令&#xff1a;npm …...

    2024/4/21 4:14:58
  9. angular常用命令

    创建项目 ng new angular-tour-of-heroes 创建服务 ng g service services/menus按照惯例&#xff0c;这个模块类的名字叫做 APPRoutingModule&#xff0c;并且位于 src/app 下的 app-routing.module.ts 文件中 ng generate module app-routing --flat --moduleapp --flat 把这…...

    2024/4/21 4:14:57
  10. angular2+ 常用链接

    Angular4 路由守卫 https://www.cnblogs.com/leijing0607/p/8075324.html使用Angular CLI生成路由 https://www.cnblogs.com/cgzl/p/8611532.htmlangular2 学习笔记 ( Router 路由 )https://www.cnblogs.com/keatkeat/p/5810987.html...

    2024/4/20 15:52:30
  11. angular中常用知识点整理

    1、angular.forEach循环 angular.forEach循环中常常会遇到一个问题&#xff1a;循环过程中如何跳出该循环&#xff1f;在JavaScript的for循环中&#xff0c;我们常常会用break或者用return结束循环&#xff0c;但是&#xff0c;在angular.forEach中&#xff0c;break和return根…...

    2024/4/20 19:52:36
  12. Angular 常用概念

    1.模块与装饰器 Angular设计目标就是适应大型应用的开发&#xff0c;模块的概念就是来组织不同的组件及服务。一个大型应用的最终形态就是各种不同的模块的组合 import { NgModule } from angular/core; import { BrowserModule } from angular/platform-browser; import …...

    2024/4/20 19:52:34
  13. Angular 创建常用命令

    ng generate component example 生成组件带有模版 ng generate component example -it 生成内联模版&#xff08;不会单独生成html文件&#xff09; ng generate directive my-directive - 生成一个新指令 ng generate pipe my-pipe - 生成一个新管道 ng generate service …...

    2024/4/20 19:52:33
  14. Angular常用的一些资源

    2019独角兽企业重金招聘Python工程师标准>>> github上有很多新手项目&#xff0c;angular团队自己也编写了很多入门级的东西。但是这些项目里面&#xff0c;有很多配置文件不太正确&#xff0c;导致很多人下来之后跑不起来&#xff0c;我整理了一些&#xff0c;代码…...

    2024/4/20 19:52:33
  15. angular router常用配置

    Angular’s Routeconst routes: Routes [{// 来源管理 一览path: sourceList,component: SourceListComponent},{// 推广二维码 一览path: qrcodeList,component: QrcodeListComponent,},{// 推广二维码 新建/编辑path: qrcodeEdit,component: QrcodeEditComponent,},{// 推广…...

    2024/4/20 19:52:32
  16. Angular 常用命令行

    1. ng -v 查看angular-cli是否安装成功、angular-cli的版本号 2. ng new 项目名称 新建angular项目 3. ng g class 类名 动态生成类文件&#xff1b; 4. ng g i 接口名 动态生成接口文件&#xff1b; 5. ng g c 组件名 动态生成组件&#xff0c;并把这个组件导入module中&#…...

    2024/4/20 19:52:32
  17. angular常用内置指令

    angular常用指令 指令名称描述ng-app用来定义模块的作用范围ng-controller用来定义控制器的作用范围ng-repeat循环遍历数组ng-bind绑定数据 同{{}}ng-show用来显示或隐藏元素 值为true / false &#xff0c;原理是设置元素的displayng-hide用来显示或隐藏元素 值为true / fals…...

    2024/4/27 20:30:28
  18. angular项目常用工具总结

    服务端渲染 https://angular.cn/guide/universalhttps://www.cnblogs.com/sgciviolence/p/6961287.htmlhttps://www.jianshu.com/p/40be228a5ec6https://segmentfault.com/a/1190000019411795 插件 富文本编辑器 http://www.html580.com/12414动画库&#xff1a;animate.css…...

    2024/4/21 4:14:57
  19. Angular中常用内置管道

    自定义管道详见官方文档 Angular官方文档&#xff08;管道使用详细说明&#xff09; Angular官方API参考手册 1. DatePipe&#xff1a;根据本地环境中的规则格式化日期值。2. UpperCasePipe&#xff1a;把文本全部转换成大写。3. LowerCasePipe &#xff1a;把文本全部转换成小…...

    2024/4/21 4:14:55
  20. angular一些常用的方法:

    angular.copy(); 用法&#xff1a;对Object对象的深度拷贝$scope.data {name:yanjinyun,age:11};$scope.origData angular.copy($scope.data); angular.fromJson() var json {"name":"liSi", "password":"321"}; var jsonArr [{&…...

    2024/4/21 4:14:54

最新文章

  1. 腾讯云邮件推送如何设置?群发邮件的技巧?

    腾讯云邮件推送功能有哪些&#xff1f;怎么有效使用邮件推送&#xff1f; 腾讯云邮件推送以其稳定、高效的特点&#xff0c;受到了众多企业的青睐。那么&#xff0c;腾讯云邮件推送如何设置呢&#xff1f;又有哪些群发邮件的技巧呢&#xff1f;下面AokSend就来详细探讨一下。 …...

    2024/4/28 0:19:42
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 【面经】2024春招-软件开发工程师-后端方向1

    面经整理系列&#xff1a; 【面经】软件开发工程师-后端方向1 文章目录 岗位与面经基础1&#xff1a;数据库 & 网络基础2&#xff1a;系统 & 语法模板3&#xff1a;算法 & 项目 岗位与面经 岗位介绍 JD: 美团-软件开发工程师-后端方向-1小时左右 金融服务平台 技…...

    2024/4/27 9:25:23
  4. C# 构建可定时关闭的异步提示弹窗

    C# 构建可定时关闭的异步提示弹窗 引言1、调用接口的实现2、自动定时窗口的实现 引言 我们在最常用最简单的提示弹框莫过于MessageBox.Show( )的方法了&#xff0c;但是使用久了之后&#xff0c;你会发现这个MessageBox并不是万能的&#xff0c;有事后并不想客户去点击&#x…...

    2024/4/23 6:37:29
  5. MongoDB聚合运算符:$map

    文章目录 语法举例对数组元素取整将摄氏度转为华氏度 $map聚合运算符将指定的表达式应用于数组元素&#xff0c;对数组每个元素进行计算并返回计算后的数组。 语法 { $map: { input: <expression>, as: <string>, in: <expression> } }参数说明&#xff1a…...

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

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

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

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

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

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

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

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

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

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

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

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

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/27 8:32:30
  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