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 中介者模式实例
Dec 16 Javascript
从阶乘函数对比Javascript和C#的异同
May 31 Javascript
微信JS接口大全
Aug 25 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
JS实现验证码倒计时的注册页面
Jan 02 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
May 03 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
iview在vue-cli3如何按需加载的方法
Oct 31 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
原生javascript如何实现共享onload事件
Jul 03 Javascript
vue路由的配置和页面切换详解
Sep 09 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获取网页标题的3种实现方法代码实例
2014/04/11 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php实现paypal 授权登录
2015/05/28 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
Smarty模板语法详解
2019/07/20 PHP
Javascript 继承机制实例
2009/08/12 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
python中最小二乘法详细讲解
2021/02/19 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
一份Java笔试题
2012/02/21 面试题
《三峡》教学反思
2014/03/01 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
战友聚会致辞
2015/07/28 职场文书