2013-04-02 10 views
20

メインディビジョンの上にマウスを置くと、メインディビジョンの子divがデフォルトで非表示になります。angle:ホバー上の更新範囲

私は角度でそのネイティブを持っていて、jqueryの.hover()の方法を忘れています。

私は子divでng-showを使用していますが、メインdivをホバーするとバインディングを更新します。ホバリングを聞くよう指示がありますか?

+0

ホバーイング(例:ng-hover)の指示はありませんが、あなたはそれを書くことができます!それがAngularJSの美しさです。 =) – Swordfish0321

答えて

51

あなたは正しい道を歩いています。実際には、ngMouseenterディレクティブとngMouseleaveディレクティブを使用してこれを行うことができます。

<span ng-mouseenter="show = true" ng-mouseleave="show = false"> 
    Mouse over me. 
</span> 

<div ng-show="show">Hello!</div> 

ここでの作業Plunkerです:Swordfish0321 @http://plnkr.co/edit/Ro80nR7HT7OGGPCXjz7E?p=preview

も権利である - あなたがしたい場合は、ホバリングのために特別に聞くための非常に簡単な指示を書くことができますが、それは必要ではないかもしれません。たとえば、UI Bootstrapのツールチップにはmouseentermouseleaveを使用します。

+0

ありがとう!それは私が探していたものです。 –

+0

@Josh David Miller。私はそれにマウスをかざすと "Hello"を表示したい。私は内側のdivとしてそれを置くことはできません。これに関する助言? – user100693

4

@ JoshDavidMillerのおかげで、非常に簡潔な答えが得られます。私はこれをng-repeatで行う必要があり、それを行うためのエレガントな方法を理解できませんでした。スコープでブール値を使用すると、リスト内のすべての要素の編集コントロールが表示されていました。 angular.element(つまりJQuery)をホッピングし、ホバーハンドラを自分でつけることで、ホバリングされた要素のコントロールだけを手動で表示できるようになりました。私はそのような邪悪な道に踏み込んでいないのがうれしいです。

<div ng-repeat="item in items" ng-mouseenter="item.showEdit = true" ng-mouseleave="item.showEdit = false"> 
    <span class="glyphicon glyphicon-edit" ng-show="item.showEdit"></span> 
    Mouse over me. 
</div> 

は単にitemではなく$scopeにプロパティを添付します。いくつかの状況で私のリスト内の項目にランダムなキーを追加することはできませんでしたので、itemが実際にはラッパーオブジェクトのプロパティである新しい配列に配列をマップしました。 itemのキーを汚染することなく。

+2

私は$ parentスコープを明示的に参照して解決した同様の問題がありました。その前に、オブジェクトを直接更新しようとしたところ、下位のスコープに同じ名前の新しいフィールドが作成されました。 – downhand

+0

@downhandそうです、それはスコープの継承のためです。継承されたプロパティを読み取ることはできますが、それらを設定すると、オーバーライドするのではなく、基本となるプロトタイププロパティが隠されます。 AngularよりもJavaScriptの制限が多い:) – Chev