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 相关文章推荐
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
jQuery中document与window以及load与ready 区别详解
Dec 29 Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 Javascript
Angularjs中controller的三种写法分享
Sep 21 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
微信小程序如何使用云开发
May 17 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
layui form表单提交之后重新加载数据表格的方法
Sep 11 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 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
星际流派综述
2020/03/04 星际争霸
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Python sorted排序方法如何实现
2020/03/31 Python
Django-imagekit的使用详解
2020/07/06 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
详解python metaclass(元类)
2020/08/13 Python
世界上最大的艺术社区:SAA
2020/12/30 全球购物
金士达面试非笔试
2012/03/14 面试题
Linux机考试题
2015/10/16 面试题
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
办公室内勤工作职责
2013/12/11 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
2014中考励志标语
2014/06/05 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
敬老院活动感想
2015/08/07 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python