2016-04-26 5 views
1

ng-clickによってトリガーされる関数とng-changeによって引き起こされる関数、または$ watch(私は両方を試みました)の2つの関数があります。

$scope.setGenre = function(x) { 
    if (genre == x) { 
     genre = 0; 
    } else { 
     genre = x; 
    } 
    $location.search().genre = genre; 
    $scope.getVideos(); 
}; 

ボタンをクリックするとジャンルパラメータが指定された値にURLで直接設定されています

NGクリックメソッドは次のようになります。 $ scopeや$ applyなどは必要ありません。

NG-変更または$が方法を見て実際には同じになります。

$scope.$watch('search', function() { 
    $location.search().search=$scope.search; 
    $scope.getVideos(); 
}); 

しかし、どうやらパラメータがURLに設定されていません。クリックしてng-click機能を実行すると、検索パラメータが設定されます。

$location.search().search=$scope.search;を$ timeoutに入れるか、$ scope.applyを実行しようとしましたが、問題は常にダイジェストが実行されていることです。

+0

問題のライブデモ(plunker/jsfiddle)を作成できますか? – yarons

+0

はい! 'genre'がどこに定義されているのか分かりません。 さらに、URLで動作することを期待しました。すなわち、元のURLは'リフレッシュされたURL 'になります。 '$ locationChangeStart' 'URLの変更を監視する$ locationChangeSuccess'イベント –

+0

ジャンルは関数の上に定義され、実際にはsetGenre関数は私が望むように動作します。 2番目の($ watch)関数は、まったく同じコードなので、期待どおりに機能しません。 – Sebi55

答えて

0

私が見つけた解決策は、単に$location.search()の代わりに$location.url()を使用することです。私にとって、$location.searchがng-changeまたは$ watchを使用するときに異なった働きをする理由はまだ分かりません。

これが私の新しい機能である:私は私はこのような$location.url()機能を編集したい場合にのみ、reloadOnSearchを使用するためには

$scope.$watch('search', function() { 
    $location.url('/videos?genre='+genre +"&search="+ $scope.search, false); 
    $scope.getVideos(); 
}); 

app.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) { 
    var original = $location.url; 
    $location.url = function (url, reload) { 
     if (reload === false) { 
      var lastRoute = $route.current; 
      var un = $rootScope.$on('$locationChangeSuccess', function() { 
       $route.current = lastRoute; 
       un(); 
      }); 
     } 
     return original.apply($location, [url]); 
    }; 
}]); 

これは私がそうブールパラメータを渡すことができますreloadOnSearchを動的に使用できるかどうかはわかりません。

関連する問題