1

私のアプリケーションでは、文字列が変更されrouteUpdateたかどうかを確認し、それに応じてビュー内を移動します。$location.searchそのようです。

$scope.$on('$routeUpdate', function(next, current) {        
    var slide_key = $location.search().slide_key;
    if (slide_key)
    $scope.go_to_slide(slide_key);      
});

またreloadOnSearch、コントローラーをリロードしないために false を使用していることにも注意してください。

通常、私はこれを変更することでこれをトリガーし、$location.search正常に動作します

すべて正常に動作しますが、検索パラメーターを変更せずにこの動作をトリガーしたい場合があります。

検索パラメータを同じ値に変更しようとしました->運が悪い。

それを別の値に変更すると、routeUpdate発火し、すべてが正常に機能します。

routeUpdateでは、 params の値を変更せずに手動でトリガーするにはどうすればよい$location.searchですか?

4

1 に答える 1

6

$routeUpdateに影響を与える URL の変更なしで実際のイベントをトリガーしたい場合は、手動で干渉する必要があることは正しいと思います$location.absUrl()

この例では、$routeUpdate イベントをトリガーします。

<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a>
// or the precise broadcast would be:
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl())

しかし、現在のコードでは、 からのパラメーターを使用して何もしない$routeUpdateので、$routeUpdate.

よりクリーンに見える他の代替手段には、機能しない理由があります。

$route.reload()常に実際の更新パスを強制します。

https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L352 https://github.com/angular/angular.js/blob/master/src/ngRoute/route .js#L415

$locationは の URL との比較に依存している$browserため、URL の意味のある部分を変更しないと正常に起動することはできません。

https://github.com/angular/angular.js/blob/master/src/ng/location.js#L560

于 2013-08-03T15:13:29.987 に答える