2016-04-11 15 views
1

私は2つの異なる経路のための2つの異なる状態持っているつのルートから、オプションのparamsを渡す停止する方法:私は$ location.searchを使用route1の内角度UIルータは完全に異なるルート

// Route1.js 
angular.module('app') 
.config(function ($stateProvider) { 
    $stateProvider 
    .state('route1', { 
     url: '/route1?someOptionalParams', 
     reloadOnSearch: false, 
     templateUrl: 'app/routes/route1/route1.html', 
     controller: 'Route1Ctrl', 
     controllerAs: 'vm' 
    }); 
}); 

// Route2.js 
angular.module('app') 
.config(function ($stateProvider) { 
    $stateProvider 
    .state('route2', { 
     url: '/route2', 
     templateUrl: 'app/routes/route2/route2.html', 
     controller: 'Route2Ctrl', 
     controllerAs: 'vm' 
    }); 
}); 

を(例えば$location.search('someOptionalParams', 'yayParams');)を更新しますそのルートのロードされたデータしかし、私がng-href='\route2'を使ってRoute2に行くnavbarをクリックすると、paramsが来ます。この現象を防ぐにはどうしたらいいですか?

更新: 私はroute1の中で、このコードに問題を特定することができました:

$scope.$on('$locationChangeSuccess', function() { 
    doAsynchronousStuff(); 
}); 

function doAsynchronousStuff() { 
    ...codey stuff... 
    $location.search('someOptionalParams', 'newData'); 
} 

$のlocationChangeSuccessコード、私はルートを変更開始後に起動しますが、ルートが変更される前に私は現在、コードを場所の変更に応じて発動させたり、関連のないルートに移動しているときにコードが発射されないようにするための代替方法を探しています。

答えて

0

ui-router(現れているように見えます)を使用している場合は、ng-hrefの代わりにui-srefを使用して、その状態をパラメータとともに指定できます。例:

<a ui-sref="route2({ id: 1 })">Foobar</a> 

パラメータをオフにすると、明らかにパラメータが渡されません。ここではそれについて

詳しい情報https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref

+0

驚くばかりです、私はこれを行っていきます。 – bananabanana

+0

これは解決していないようです。さらに、Route1にいるときにオプションのパラメータがなくても、Route2に移動するとオプションのパラメータが表示されるので、URLは "website.com/Route2?someOptionalParams="になります。このコードベースでもう少し詳しく調べて、他の手がかりを考え出すことができるかどうかを見てみましょう。 – bananabanana

+0

'default'を設定する' .state() '定義に' params:{someOptionalParams:null} 'を追加すると、定義されていない限り表示されません。 – tyler

0

私はroute1のコントローラ内の$ location.pathをチェックすることにより、この問題を解決することができました。

// In route1.controller.js 
$scope.$on('$locationChangeSuccess', function() { 
    if ($location.path() === '/route1'){ 
    doAsynchronousStuff(); 
    } 
}); 

私は、これは私がおそらく間違って$ locationChangeSuccessを使用しているサインですので、私が研究しておこうと思っています。私は新しい質問hereを投稿しました。

関連する問題