angularjs – 具有多个父项的子状态/模态的路径,可以打开多个状态

前端之家收集整理的这篇文章主要介绍了angularjs – 具有多个父项的子状态/模态的路径,可以打开多个状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个抽象的配置文件状态,它有多个子状态(对于配置文件页面的不同选项卡),然后我想让另一个子配置文件状态为模态.我已经实现了这样的事情:
$stateProvider
    .state('profile',{
        url: '/profile/:profileID',templateUrl: 'profile.html',controller: 'ProfileCtrl',abstract:true,resolve: {
            user: ...
        }
    })
    .state('profile.circles',{
        url: '',templateUrl: 'profilecircles.html',controller: 'profilecirclesCtrl',resolve: { circle: ... }
    })
    .state('profile.squares',{
        url: '/collections',templateUrl: 'profilesquares.html',controller: 'profilesquaresCtrl',resolve: { squares: ... }
    })
    .state('profile.editprofile',{
        url: '/edit',onEnter: ['$window','$modal',function($window,$modal) {
            $modal.open({
                templateUrl: 'editprofile.html',controller: 'editProfileCtrl',resolve: {
                    user: ...
                }
            }).result.then(function() {
                $window.history.back();
            },function() {
                $window.history.back();
            });
        }]
    })

这很有效,除了因为editprofile是正方形和圆形的兄弟,当该状态处于活动状态并且模态处于视图中时,正方形或圆形状态被卸载,并在模态关闭时再次加载.

当profile.editprofile状态处于活动状态时,有没有办法让这些状态保持活动状态?我正在追逐像state..editprofile这样的东西.

由于目前还没有理想的解决方案,我提出了一个相当优雅的解决方案.我的代码是通用的,易于理解和评论,因此它应该很容易适应任何项目.

请参阅代码中的注释以获取最重要的要点.

Live Demo (click).

样本国家

$stateProvider

// modal will open over this state from any substate
.state('foo',{
  abstract: true,url: '/:fooProp',templateUrl: 'foo.html',controller: 'FooController'
})
.state('foo.main',{
  url: '',templateUrl: 'foo-main.html',controller: 'FooMainController'
})
.state('foo.bar',{
  url: '/bars/:barId',templateUrl: 'foo-bar.html',controller: 'FooBarController'
})

// append /modal route to each `foo` substate
.state('foo.main.modal',getModalState())
.state('foo.bar.modal',getModalState())

;

function getModalState() {
  return {
    url: '/modal',onEnter: [
      '$modal','$state',function($modal,$state) {
        $modal.open({
          templateUrl: 'foo-modal.html',controller: 'FooModalController'
        }).result.finally(function() {
          // go to parent state - the current `foo` substate
          $state.go('^');
        });
      }
    ]
  }
}

调节器

$scope.goToModalState = function() {
  // go to this state's `modal` state
  $state.go($state.current.name+'.modal');
};

视图

<a ng-click="goToModalState()">Open Modal</a>

猜你在找的Angularjs相关文章