4

私の ui-router 状態プロバイダーは次のように設定されています。

.state(
    'events', {
        url: '/events',
        templateUrl: ...,
        controller: ...
    })
.state(
    'events.listEvents', {
        url: '/list',
        templateUrl: ...,
        controller: ...
    })
.state(
    'events.eventDetails', {
        url: '/details',
        templateUrl: ...,
        controller: ...
    })


私は状態で始めるevents.listEventsので、私の URL は次のようになります。

https://baseUrl.com/home#/events/list

そのページには次のようなリンクがあります。

<a ui-sref="events.eventDetails">event details</a>

通常どおりリンクをクリックすると、正しく機能し、次の URL のページに移動します。

https://baseUrl.com/home#/events/details

しかし、同じリンクを新しいタブで開こうとすると (または右クリックして「href」リンク アドレスをコピーすると)、正しくありません。

https://baseUrl.com/events/details



問題は、 ui-srefが間違ったhref値を埋めているのはなぜですか? 生成している URL に#ハッシュがまったくないのはなぜですか? (そして、はい、私はすでに $locationProvider.html5mode を有効/無効にしようとしましたが、これには何の影響もありませんでした。)

4

1 に答える 1

4

回避策としてこれをメインに追加しましapp.jsた:

.run(['$state',
    function($state) {
        $state.originalHrefFunction = $state.href;
        $state.href = function href(stateOrName, params, options) {
            var result = $state.originalHrefFunction(stateOrName, params, options);
            if (result && result.slice(0, 1) === '/') {
                return '#' + result;
            } else {
                return result;
            }
        }
    }
])
于 2016-01-13T19:47:44.113 に答える