如何将ui-sref值动态设置为当前状态的父状态

时间:2016-05-04 15:02:26

标签: angularjs angular-ui-router

1)我的html表单/视图下面有锚标记,点击后将我带到一个状态

           <a class="btn btn-default" ui-sref="custom.email.send">

2)但是从2条不同的路线调用相同的形式

3)因此我想动态设置ui-sref的值以指向调用它的状态的父状态!

例如,如果从状态“custom.email.send”调用上述表单,则ui-sref应指向“custom.email”

2 个答案:

答案 0 :(得分:1)

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state

$rootScope.linkHistoryBack = '/';
$rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) {
  $rootScope.linkHistoryBack = $state.href(from, fromParams, {
    absolute: true
  });
});
<a ng-href="{{$root.linkHistoryBack}}">Go Back</a>

或者,建立一个指令:

angular
  .module('uiSrefUtils', ['ui.router'])
  .directive('uiSrefBack', function uiSrefBackDirectiveFactory($state) {
    
    return function(iScope, iElement, iAttributes) {
      
      iElement.attr('href', '/');
      
      $rootScope.$on('$stateChangeSuccess', function(e, to, toP, from, fromP) {
        var link = $state.href(from, fromP, {
          absolute: true
        });
        
        return iElement.attr('href', link);
      });
      
    };
  })
;

// use in your app
angular.module('myApp', ['ui.router', 'uiSrefUtils']);
<a ui-sref-back>Return</a>

答案 1 :(得分:0)

您可以创建状态更改侦听器以全局侦听状态更改

$rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) {
        $rootScope.previousState = from;
    });

然后,您可以使用$rootScope.previousState.name访问以前的州名称,并将其用作绑定值