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 相关文章推荐
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
Jquery自定义button按钮的几种方法
Jun 11 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
Bootstrap每天必学之轮播(Carousel)插件
Apr 25 Javascript
微信jssdk用法汇总
Jul 16 Javascript
JS简单生成两个数字之间随机数的方法
Aug 03 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
Vue数据双向绑定的深入探究
Nov 27 Javascript
解决Vue打包上线之后部分CSS不生效的问题
Nov 12 Javascript
微信小程序自定义联系人弹窗
May 26 Javascript
微信小程序整个页面的自动适应布局的实现
Jul 12 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乱码问题
2012/03/25 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
快速入门Vue
2016/12/19 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Python 支持向量机分类器的实现
2020/01/15 Python
pygame实现飞机大战
2020/03/11 Python
Python实现石头剪刀布游戏
2021/01/20 Python
最新党员的自我评价分享
2013/11/04 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
golang生成vcf通讯录格式文件详情
2022/03/25 Golang