Angular-UI-Router - 在不知道第二级嵌套视图的情况下更改第三级嵌套视图

时间:2013-12-18 05:33:59

标签: javascript angularjs angular-ui-router

我有几个“父模块”,让我们说

  • 用户
  • 社区

我也有“嵌入式模块”,比如说

  • 照片
  • 视频
  • 维基

我的可嵌入模块可以嵌入到父模块中。 所有模块都没有交叉依赖关系。例如,用户不知道他有照片,视频和维基,但知道他有可嵌入模块的列表,这些模块将嵌入到他的页面中。照片,视频和维基也不知道它们将被嵌入的位置。

我有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>

然后照片模块可以使用:parent 参数来确定其父

或者至少我需要链接功能,如:

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

链接全球层面的模块。

1 个答案:

答案 0 :(得分: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');