angular 6.x关于多个组件共享状态

angular6.x新手,最近在使用过程中碰到如下问题,有没有熟悉的大神来分享一下经验

  1. angular中如何多组件共享一个状态,在vue等中可以采用Flux 架构体系,官方也有提供对应的库如(VUEX),那么在angular中如何兄弟组件,或者父组件与孙组件间的数据共享(排除中间组件做转发的方法,感觉扩展性不好,不易维护。)
  2. 在angular中service服务应该如何理解?个人目前的感觉很类似vue中的mixins,就是一段通用的方法,在组件内导入注册即可使用,并且不同组件倒入相同service不会共享数据。
  3. 在中大型项目中angualr项目肯定会面临多组件共享状态,那么在中大型项目中应该如何处理?或者你们都是采用什么样的方案
  4. 在路由中鉴权应该用什么办法去处理比较好?比如:未登录的话,不能进入某些页面,可以的话希望可以提供对应的demo
阅读 6.2k
4 个回答
新手上路,请多包涵

具体的实现细节,因为时间关系提供不了,简单罗列几个解决方案的方向。

  1. 你说的多组件共享状态,看起来是 redux 的概念,angular 也有这些实现,如果你习惯 redux 的话可以看看 ngrx 这些库也许能给你答案。
  2. 事实上angular 2的代码中没有service的概念,只是因为习惯的原因很多命名会用 service 来命名,它们是一种可注入的对象或值,也可以是方法(Angular中的依赖注入),service 会有自己的作用域,在模块中注册的 service 会与模块中的所有成员共享 service 的实例,如果其中一个组件自己又注册了这个service,那么这个组件注入进来的 service 实例是一个新的实例,模块之间也类似,除此之外更多的资料可以参考前面的链接。
  3. 同1
  4. 鉴权用守护(Guard)来做,支持同步,异步(Promise, Observable)- 参考链接

service是单例的,意味着全局只有这一个对象,所以数据也只有一份

  1. 多组件共享,可以使用ngrx之类的类redux的库,也可以使用service传递.看具体需求. ngrx定义store,entity之类的代码量大一点,但是一旦定义好之后使用的时候比较方便,类似一个全局的数据库.而且chrome的devtool有提供对于ngrx的支持,可以直观追踪event,甚至提供time machine可以回到之前的event. 相对来说service使用起来比较简单,而且也可以分级注入.

2.service是依赖注入的概念,其实是来自后端语言,如果了解C#之类的语言应该就可以发现概念基本一样,毕竟TypeScript也是微软家出的.vue的mixinmixin个人感觉更像是面向对象的继承的概念.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题