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 remove 自定义数组删除方法
Oct 20 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
node.js中的fs.fchmodSync方法使用说明
Dec 16 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
js实现水平滚动菜单导航
Jul 21 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
Dec 10 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
Dec 18 Javascript
webpack公共组件引用路径简化小技巧
Jun 15 Javascript
js中事件对象和事件委托的介绍
Jan 21 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
XAMPP安装与使用方法详细解析
2013/11/27 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
犀利的js 函数集合
2009/06/11 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
五好党支部事迹材料
2014/02/06 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
房地产推广策划方案
2014/05/19 职场文书
校本培训个人总结
2015/02/28 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
房产证明范本
2015/06/19 职场文书
董事长致辞
2015/07/29 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
详解Python flask的前后端交互
2022/03/31 Python