2014-06-05 168 views
0

停止嵌套状态比方说,我有使用angularjs UI路由器两种状态设置:UI路由器:加载

.state('branding', { 
    url: "/{branding}", 
    controller: 'BrandingCtrl', 
    templateUrl: '/app/Branding.html' 
}) 
.state('branding.index', { 
    url: "/index", 
    controller: 'IndexCtrl', 
    templateUrl: '/app/Index.html' 
}) 

在我BrandingCtrl我设置了页面的细节,并且还验证用户有权访问该版本的网站。如果他们没有访问权限,我可以拨打$ state.go('someotherstate')并将它们发送出去

如果有人去/ badbranding /索引,BrandingCtrl将确定用户没有访问并更新状态。但是,IndexCtrl仍然会被执行,即使我已经更改父控制器中的状态,并且它不应该适用。

如何告诉ui-router取消任何嵌套状态的执行?

回答

0

我最终只是把它作为一个解决方案的要求,以防止父控制器执行以及..我最初没有去这条路线,因为它似乎并不像$州知道在那个点的参数(它没有),但我看到我需要的信息是可用的$ stateParams

.state('branding', { 
     url: "/{branding}", 
     resolve: { 
      HasAccess: function ($q, $stateParams) { 
       var deferred = $q.defer(); 
       var branding = $stateParams.branding; 

       if (/*doesn't have access*/) 
        deferred.reject('you do not have access'); 
       else 
        deferred.resolve(); 

       return deferred.promise; 
      } 
     }, 
     controller: 'BrandingCtrl', 
     templateUrl: '/app/Branding.html' 
    })