Angular5中状态管理的实现


Posted in Javascript onSeptember 03, 2018

前面学习了vue,react 都有状态管理,如vue中的vuex是全局状态管理,在任何组件里都可以引用状态管理中的数据,同样,react中的redux和mbox也是,但遇到angular5却不知道了。

一年前使用过angular1.x做过项目,那时全局状态可以使用$rootscope,也可以使用服务Service实现,下面就用Service方式在angular5中实现下吧

先定义状态管理对象,需要存什么数据,自己定义

export class UserInfo {
 public userInfo: boolean;
 constructor(){
   this.userInfo = true; //设置全局的控制导航是否显示
 }
}

然后定义Service,如下

import { Injectable} from '@angular/core';
import { Headers, Http } from '@angular/http';
import { UserInfo } from './user-info.model';

@Injectable() //注入服务
export class ListsService{
 private userInfo;
 constructor(private http: Http) { 
  this.userInfo = new UserInfo();
 }

 //设置路由显示的状态
 setUserInfo(v) {
  this.userInfo.userInfo = v;
 }
 //获取路由显示的状态
 getUserInfo() {
  return this.userInfo;
 }
}

配置了service一定要在ngmodule中导入,这样才能在此module中有效

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';  
import { HttpModule }  from '@angular/http';

import { AppComponent } from './app.component'; 

import { AppRouterModule } from './router.module'; 
import { ViewComponent } from './view.component';
import { ListComponent } from './list.component';
import { OtherComponent } from './other.component';
import { DetailComponent } from './detail.component'; 
import { ListsService } from './app.service';

@NgModule({
 declarations: [
  AppComponent,
  DetailComponent,
  ViewComponent,
  ListComponent,
  OtherComponent
 ],
 imports: [ 
  BrowserModule,
  FormsModule ,
  AppRouterModule,
  HttpModule
 ],
 providers: [ListsService], 
 bootstrap: [AppComponent] 
})
export class AppModule { }

然后就可以在component中使用了

@Component({
 selector: 'app-root',
 template: `
 <div >
   <div class="lists" *ngIf='userInfo.userInfo'>
    <a routerLink="/view" routerLinkActive ="active">特价展示</a>
    <a routerLink="/list" routerLinkActive ="active">列表展示</a>
  </div>
  <router-outlet></router-outlet>
 </div>
 `,
 styles:[`
 .lists a{
  padding:0 10px;
 }
 .active{
  color: #f60;
 }
 `]
})
export class AppComponent {
 private userInfo;
 constructor(private listsService: ListsService) { 
   this.userInfo= this.listsService.getUserInfo();
 }
}

在详情页中通过改变状态来改变页面

@Component({
 selector: 'app-detail',
 template: `
  <div>
   详情页{{id}}
   <button (click)="goBack()">返回</button>
  </div>

 `,
})
export class DetailComponent {
 private userInfo;
 constructor(
  private route: ActivatedRoute,
  private location: Location,
  private listsService: ListsService
 ) {
  this.userInfo= this.listsService.setUserInfo(false);
 }
 goBack(): void {
  this.location.back();
 }
 //组件销毁时执行
 ngOnDestroy():void{
  this.userInfo= this.listsService.setUserInfo(true);
 }
}

好了,这样就ok了。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中关于执行环境的杂谈
Aug 14 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
JS使用JSON作为参数实例分析
Jun 23 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
May 08 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
vue自定义指令的创建和使用方法实例分析
Dec 04 Javascript
es6中reduce的基本使用方法
Sep 10 Javascript
JavaScript创建对象方法实例小结
Sep 03 #Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 #Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 #Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 #Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 #Javascript
详解vue-cli下ESlint 配置说明
Sep 03 #Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
jquery中radio checked问题
2015/03/16 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JavaScript模拟push
2016/03/06 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
js实现轮播图特效
2020/05/28 Javascript
python使用psutil模块获取系统状态
2016/08/27 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
python实发邮件实例详解
2019/11/11 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python self用法详解
2020/11/28 Python
pycharm实现猜数游戏
2020/12/07 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
教研活动总结
2014/04/28 职场文书
物业保安辞职信
2015/05/12 职场文书
党小组评议意见
2015/06/02 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python