2016-08-30 5 views
0

私はAngularプロジェクトにクラシックなドロップダウンメニューを表示しています。メインリンクは常に表示されています。クリックイベントがタッチアクションで発生したかどうかを確認してください

私は親にある2つのイベントがあります。

ng-mouseenter="vm.toggleDropdown($event)" 
ng-mouseleave="vm.hideDropdowns($event)" 

をそして、彼らは完全に正常に動作します。主なリンクは単純です:

ng-click="vm.navToState(item.urlState, $event)" 

パラメータとして渡される文字列に行くには、$ state.goを使用します。モバイルデバイスでは、ng-mouseenterがタップするとドロップダウンメニューが表示され、これは完璧です。これは、ng-clickがトリガーされているため、次のステートがロードされる前にメニューが数秒しか表示されないことです。 ng-clickがタッチイベントによって起動されているかどうかを検出する方法はありますか?if文をnavToState()に追加して$ state.go()を防ぐことができますか?私はメインリンクがモバイルで到達できないようにこの方法を理解していますが、ドロップダウン内に余分なリンクを追加することに注意します。

同じ結果の他の回避策も問題ありません。

ありがとうございます!

+0

は、私はちょうどするevent.stopPropagation()を持つすべてのこれらのリンクにtouchstartイベントをバインドし、それはエミュレータ上うまくやっているようです。確かめるためにはもっとテストする必要があります。私はこれが正しい解決策であることを非常に疑う。 –

答えて

0

モバイルブラウザであるかどうかに基づいて変数を設定し、変更の状態を示すかどうかをnavToStartのチェックとして使用して、それがモバイルかどうかを気にしない別の状態変更機能を持たせることができますかモバイルブラウザの状態を変更することはできますか?これは一つのアイデアですが、うまくいかない場合は、あなたの質問に参考になるコードを書く価値があります。

は、ここでモバイルブラウザを検出する上での答えです: https://stackoverflow.com/a/11381730/5349719

+0

navToState()内の$ state.go()以外のコードは実際にはありません。これは、起動からui-srefを実行する方法がなかったためです。私はブラウザが唯一の方法だろうと思っていますね?あなたが提供したリンクを見ると、たぶん私はそれを得ることができます:var touchDevice =( 'ontouchstart' in document.documentElement); –

+0

これは確かに一つのアイデアです。 "var touchDevice =(document.documentElementのontouchstart);"から?私が提供した答えでそれを見ることはできません。 – cullimorer

+0

これはあなたが望むように見えます: window.mobilecheck = function()blablabla – cullimorer

関連する問題