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 相关文章推荐
浅析onsubmit校验表单时利用ajax的return false无效问题
Jul 10 Javascript
jquery实现用户信息修改验证输入方法汇总
Jul 18 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
Sep 08 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
js实现左右轮播图
Jan 09 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
javascript对象3个属性特征
Nov 17 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文件读写操作之文件写入代码
2011/01/13 PHP
php实现图片添加水印功能
2014/02/13 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
js 页面输出值
2008/11/30 Javascript
javascript 特殊字符串
2009/02/25 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
js精度溢出解决方案
2012/12/02 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
python获取Pandas列名的几种方法
2019/08/07 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
通信工程求职信
2014/07/16 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
优秀员工自荐书
2015/03/06 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
python实现层次聚类的方法
2021/11/01 Python