Unterdrücken Sie das erneute Laden der UI-Router-basierten Ansicht bei Änderung der Abfrageparameter

Aktualisierte Frage

Frage im Titel steht noch - ist es möglich zu fangen?parameters und das Neuladen der Ansicht abbrechen.

Ursprüngliche Frage: Ich muss Ankerunterstützung für meine Anwendung hinzufügen (Anker zu Themen).

So weit bin ich:

angular.module('app.topics', [
    'ui.state',
    'ui.router',
    'restangular'
    'app.topics.controllers'
])
.config(function config($stateProvider) {
    $stateProvider.state('viewtopic', {
        url: '/topics/:slug?section',
        onEnter: function($stateParams) {
            // Works, as state has been reloaded.
            console.log('$stateParams', $stateParams);
        },
        resolve: {
            topic: function ($stateParams, Topic) {
                // Wrapper around Restangular. Returns promise.
                return new Topic().get($stateParams.slug);
            }
        },
        views: {
            'main': {
                controller: 'TopicCtrl',
                templateUrl: 'topics/templates/details.tpl.html'
            },
            'sidebar': {
                controller: 'SidebarCtrl',
                templateUrl: 'topics/templates/sidebar.tpl.html'
            }
        }
    });
});

angular.module('app.topics.controllers', [])
    .controller('TopicCtrl', function ($scope, topic, $rootScope, $location,
                                         $anchorScroll, $stateParams) {
        $scope.topic = topic;
        $scope.slug = $stateParams.slug;
        $scope.section = $stateParams.section;
        // ..

        $scope.$watch('$stateParams.section', function (newValue, newValue) {
            // Does not work.
            console.log('stateParams.section changed', newValue, newValue);
        });
    });

Mein Hauptproblem ist, wenn ich auf den Link mit klicke#/topics/slug-name?section=section-1, state wird komplett neu geladen, was wiederum die Daten für Topic neu anfordert. Wie kann man nur Abfrageparameter "aktualisieren" (und dieses Ereignis in der Steuerung abfangen), aber den Status nicht neu laden (um die Daten geladen zu halten)?

BEARBEITEN

Für mein Problem gibt es eine ziemlich einfache Lösung, die ich nicht bemerkt habe - perAngularJS-Dokumentation zu "Hashbang und HTML5 Modi" - letzter Hash ist erreichbar über$location.hash() und Scrollen kann eingeleitet werden durch$anchorScroll()

Meine derzeitige Lösung lautet also:

Im Controller:

$scope.$watch('$location.hash', function () {
    _.defer($anchorScroll);
});

Zurückstellen ist erforderlich, da der Inhalt möglicherweise noch nicht analysiert wurde und keine IDs vorhanden sind.

In der Vorlage musste ich nur das Ziel setzen#/topics/slug-name#section-name.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage