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 相关文章推荐
JS常用字符串处理方法应用总结
May 22 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
分类解析jQuery选择器
Nov 23 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
Nov 22 Javascript
ES6中字符串的使用方法扩展
Jun 04 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
Jun 17 Javascript
Vue中component标签解决项目组件化操作
Sep 04 Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 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
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Javascript执行效率全面总结
2013/11/04 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python 实现dict转json并保存文件
2019/12/05 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
remote接口和home接口主要作用
2013/05/15 面试题
英文版餐饮运营管理求职信
2013/11/06 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
法定代表人授权委托书
2014/09/19 职场文书
2014年行政工作总结
2014/11/19 职场文书
通报表扬范文
2015/01/17 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
保护环境建议书作文500字
2015/09/14 职场文书