簡體   English   中英

如何在angularjs中進行簡單的菜單導航

[英]How to make a simple menu navigation in angularjs

我對自己能找到的東西並不滿意。 我只想要一個帶有懸停效果和選擇效果的Angularjs菜單系統的簡單示例。

我知道可以在CSS中完成“懸停”效果,但這對我來說更好地理解angularjs。

我正在嘗試做的是非常基本的東西。

基本上我有一些HTML,其中包含一些DIV(或菜單項):

<div NavCtrl id="header">
    <div class="item" ng-click="click(1)" ng-mouseenter="hoverIn()" ng-mouseleave="hoverOut()">
1
    </div>
    <div class="item" ng-click="click(2)" ng-mouseenter="hoverIn()" ng-mouseleave="hoverOut()">
2
    </div>
    <div class="item" ng-click="click(3)" ng-mouseenter="hoverIn()" ng-mouseleave="hoverOut()">
3
    </div>
</div>

我想做兩件事。

  • 點擊
  • 監聽mouseInmouseOut

我明白..

  1. 在CSS中進行懸停效果可能更好
  2. 可以使用angularjs在HTML中執行一些內聯​​邏輯

...因為我想讓這些事件產生影響。 懸停事件需要提取與該菜單項有關的信息,而單擊事件也應該能夠執行與該菜單項有關的某些動作。 廉價的CSS技巧無法解決這個問題!

對於我的懸停邏輯,我認為這可以解決問題:

  $scope.hoverIn = function($event){
    angular.element($event.srcElement).addClass('hover')
  };

  $scope.hoverOut = function($event){
    angular.element($event.srcElement).removeClass('hover')
  };

但是$ event是未定義的:(。如何從mouseover事件獲取元素對象?

我的點擊邏輯如下所示:

  $scope.click = function(position, $event) {

    elem = angular.element($event.srcElement);

    if (elem.hasClass("clicked")) {
      elem.removeClass("clicked")
    }else {
      elem.addClass("clicked")
    }

    // if (position == 1) //do something etc...
  };

相同的問題:$ event未定義。 我還想傳遞索引,以便對某些菜單項做一些特殊的事情。

我的小提琴在這里:

https://jsfiddle.net/zxjg3tpo/5/

ng-mouseenter="hoverIn($event)"

工作原理:ng-mouseenter有點聰明,除了您擁有的東西(例如,您擁有hoverIn)之外,它還在$ event范圍內。 因此,當它解析提供的表達式時,它將啟動帶有事件的hoverIn。

所有與元素(例如addClass)一起使用的操作都應在您可以直接訪問html元素的指令中完成。 有時您可能需要angular.element(...)但是在大多數情況下,您對當前元素感到滿意。 (在指令鏈接中:function(scope,element,attrs))

您錯過了通過html傳遞$ event的操作 ,並且srcElement錯誤。 請嘗試以下操作:

的HTML

    <body ng-app="navTest" ng-controller="NavTestCtrl">
<div id="header">
    <div class="item" ng-click="click(1, $event)" ng-mouseenter="hoverIn($event)" ng-mouseleave="hoverOut($event)">
1
    </div>
    <div class="item" ng-click="click(2, $event)" ng-mouseenter="hoverIn($event)" ng-mouseleave="hoverOut($event)">
2
    </div>
    <div class="item" ng-click="click(3, $event)" ng-mouseenter="hoverIn($event)" ng-mouseleave="hoverOut($event)">
3
    </div>
</div>
</body>

JS代碼:

var app = angular.module('navTest', [

]);

app.controller('NavTestCtrl', function ($scope, $location, $http) {

  $scope.click = function(position, $event) {

    elem = angular.element($event.target);

    if (elem.hasClass("clicked")) {
      elem.removeClass("clicked")
    }else {
      elem.addClass("clicked")
    }

    // if (position == 1) //do something etc...


  };


  $scope.hoverIn = function($event){
    angular.element($event.target).addClass('hover')
  };

  $scope.hoverOut = function($event){
    angular.element($event.target).removeClass('hover')
  };
});

在angularjs中,您可以通過在HTML代碼中使用$ event來獲取事件

<div class="item" ng-click="click(1,$event)" ng-mouseenter="hoverIn($event)" ng-mouseleave="hoverOut($event)">

懸停邏輯

 $scope.hoverIn = function($event){
    angular.element($event.target).addClass('hover')
  };

  $scope.hoverOut = function($event){
    angular.element($event.target).removeClass('hover')
  };

點擊邏輯

$scope.click = function(position, $event) {

    elem = angular.element($event.target);

    if (elem.hasClass("clicked")) {
      elem.removeClass("clicked")
    }else {
      elem.addClass("clicked")
    }

    // if (position == 1) //do something etc...
  };

更新的小提琴: https : //jsfiddle.net/zxjg3tpo/6/

這是另一個更新的Fiddle,其中兄弟姐妹已刪除其類(以使單擊正常工作) https://jsfiddle.net/zxjg3tpo/9/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM