2013-12-18 58 views
0

我已经几个“主模块”,可以说角-UI-路由器 - 改变3级嵌套视图不知道有关2级嵌套视图

  • 用户
  • 社区

我也有 “embedable模块”,可以说

  • 照片
  • 韦迪OS
  • 维基

我embedable模块可以嵌入到主模块。 所有模块没有交叉依赖关系。例如,用户不知道他拥有照片,视频和wiki,但知道他拥有可嵌入其页面的可嵌入模块列表。而且照片,视频和wiki也不知道它们将被嵌入到哪里。我有3层视图: - 基本视图层(顶部导航栏,徽标等) - 关心父视图(不知道哪一个被注入) - 父对象视图图层(可以是用户,社区或页面,例如持有用户照片和名称) - 关心他的可嵌入式视图(不知道他们是否被注入) - 可嵌入视图图层 - 关注他的视图中的内容

现在让我们说我在用户页面上。用户路线是#/user。现在我想通过链接访问用户的照片,例如<a href="#/user/photos/">user photos</a>,但我不能这样做,因为在照片模块中路由名称是#/photos,所以#/user/photos/不起作用。

如果我只访问<a href="#/photos">user photos</a>,它将删除父视图(父对象视图图层,例如将从屏幕上删除用户照片和名称)。

任何想法如何访问照片模块和坚持父视图,并不创建硬编码的依赖关系的方式?

我需要的是这样的:

$stateProvider 
    .state(':parent/photos', { 
      url: ':parent/photos', 
      templateUrl: 'modules/photos/index.html', 
      controller: 'PhotosCtrl' 
     }) 

,并用它从用户页面像 <a href="#/user/photos">user photos</a> 或使用它从社区页面像 <a href="#/community/photos">community photos</a>

然后照片模块可以使用:父 param来确定它的父亲

或至少我需要链接功能先进而精湛,如:

$stateProvider.state('user.photos', /*&*/'photos')

对全球链接模块。

+0

你能列出你在stateProvider中的所有状态吗?是否有'用户'状态和'社区'状态? – TheSharpieOne

+0

@TheSharpieOne,检查此:https://gist.github.com/PLEEROCK/0d60243a6a0837cbb26f – pleerock

回答

0

你对GalleryStateFactory的想法是合理的......但是我建议你将它作为提供者来添加......这将允许它取决于$ stateProvide,你可以这样做:

mod.provider('$galleryState', ['$stateProvider', function(sp) { 

    this.galleryStates = function(parent) { 
    sp.state(parent+'.gallery', GalleryStateFactory.default) 
     .state(parent+'.gallery.photos', GalleryStateFactory.photos) 
     .state(parent+'.gallery.albums',GalleryStateFactory.albums); 
    } 


    this.$get = angular.noop; //unless you wan't some service as well... 
}] 

$galleryStateProvider 
    .galleryStates('user') 
    .galleryStates('community'); 
+0

不错!但我最后的实现是使用我自定义的'StateHolder'服务来注册,管理和处理所有状态。覆盖/预先考虑/附加状态是类的可用方法 – pleerock

+1

您应该在解决方案中添加一个答案,然后接受该答案,以便此Q可以关闭;) – Jens