0

我正在将我的 SPA 从 ng-route 转换为 ui.router。这对某人来说应该是一个快速的...

对于我的一些状态,我定义$rootScope.nextState$rootscope.prevState属性(状态名称字符串),这样我就可以在导航栏上有上一个和下一个按钮/链接。

我似乎无法正确获取链接。我努力了:

<button ui-sref="{{prevState}}">Previous</button>

<button ui-sref={{prevState}}>Previous</button>

<button ui-sref="{prevState}">Previous</button>

<button ui-sref="prevState">Previous</button>

<button ng-href="{{$state.href(prevState)}}">Previous</button>

<button ng-click="$state.go(prevState)">Previous</button>

以上所有都<a>改为。

全部抛出“无效状态引用”错误或不更改状态。如何statename在 ui-router 中使用动态属性?

我已尽我所能阅读并理解这些文档。没有帮助的类似问题: https ://stackoverflow.com/questions/23476296/dynamically-constructed-ui-sref-attribute-in-ui-router和 https://stackoverflow.com/questions/24349731/dynamically-设置 ui-sref-angularjs 的值

这是一个Plunker重现问题。它以类似于angular-ui-router-title的方法使用 resolve 。这可能是事情的时间问题......

4

1 回答 1

0

对于未来的读者,我接受了@JB Nizet 的建议。

HTML

<button ng-click="goPrevious()" ng-disabled="!previousState">Previous</button>
<button ng-click="goNext()" ng-disabled="!nextState">Next</button>

JS

app.run( function($rootScope, $state) {

  $rootScope.$on('$stateChangeSuccess', function () {

    var previous = $state.$current.locals.globals.$prevState;
    var next = $state.$current.locals.globals.$nextState;

    $rootScope.previousState = previous;
    $rootScope.nextState = next;

    if (typeof previous !== 'undefined') {
        $rootScope.goPrevious = function() { $state.go(previous); };
    } else {
        $rootScope.goPrevious = function() { console.log ("No previous state found"); };
    }
    if (typeof next !== 'undefined') {
        $rootScope.goNext = function() { $state.go(next); };
    } else {
        $rootScope.goNext = function() { console.log ("No next state found"); };
    }

  });
});
于 2015-11-11T18:01:05.307 回答