2016-04-06 12 views
0

AngularJS kullanarak sayfa yüklemesinde programlı olarak bir açılır menünün tıklama olayını tetiklemenin mümkün olup olmadığını sorabilir miyim?AngularJs - "click" olayını programlı olarak başlatarak bir Bootstrap açılır menüsünü açma (NO jQuery)

Olmak istediğim, sayfayı yükledikten sonra, gezinme menümün otomatik olarak görüntülenmesidir. ancak yapamadım, ben gerçekten yakın olduğum bir his var

$scope.displayMainMenu = function() { 
    var domElement = document.getElementById('nav-burger'); 

    alert('before timeout'); // <-- This gets triggered 

    $timeout(function() { 
     angular.element(domElement).triggerHandler('click'); 
    }, 0); 

    alert('after timeout'); // <-- This doesn't get triggered... 
} 

:

Bu

Bugüne kadar ne var:

<li class="menu-item" style="margin-top:15px"> 

<!-- Single button --> 
    <div class="btn-group open" uib-dropdown is-open="status.isopen"> 

     <!-- Hamburger menu --> 

     <img ng-init="displayMainMenu()" id="nav-burger" uib-dropdown-toggle ng-disabled="disabled" ng-click="sMainMenu=true; isSubMenu=resetMenu(); getLinks(); bStopPropagation=true;" src="img/burger.png"> 

     <!-- Main menu --> 
     <ul uib-dropdown-menu role="menu" aria-labelledby="single-button" ng-click="bStopPropagation && $event.stopPropagation()"> 

     <!-- Main Menu --> 
     <li role="menuitem" class="main-menu-item" ng-repeat="link in links" ng-click="whatMenu(link.name); isSubMenu=false;" ng-show="isMainMenu"> 
     <img id="{{link.icon}}">{{link.name}}<img class="navi-expand-icon"> 
     </li> 
     <!-- End Main Menu --> 

     </ul> 

    </div> 
</li> 

Ve bu benim Açısal JS kodu neden çalışmadığını anlamaya çalış.

Yanıtlarınız için şimdiden teşekkür ederiz. Bu yüzden bir yazım hatası yapmış sanırım sen ng-show="isMainMenu"

isMainMenukullandık liste öğeleri göstermek için, Ancak ng-click="sMainMenu=true;" :

+0

$ aşımı ilan mı ve bunu sizin projenize dahil oldu? Herhangi bir konsol hatası aldınız mı? – Matheno

+0

1. Hayır, ben sadece bunu SO'da başka bir sorudan aldım. İdeal olarak $ timeout bildirmeliyim? 2. "TypeError: Object," done "özelliğini veya özelliğini desteklemiyor. Bunun anlamını bilmiyorum ... –

cevap

0

senin resmin üzerine ng tıklama bu tetikler.

+0

Hayır, yazım hatası değil. Bunun arkasındaki sebep, menünün görüntülenmesi gereken yoldur. Kullanıcı ana menüdeki öğelerden birine tıkladığında, bir alt menü görünecek ve varsayılan davranış yerine ana menü alanı ile örtüşecektir (sağ tarafta görünecektir). Hangi menülerin görüntülenmekte olduğunu anlamak için isMainMenu'ya ihtiyacımız var. Umarım bu mantıklıdır ... :) –

0

Matheno'nun ipucu için teşekkürler! Ben $ aşımı hakkında biraz daha araştırma yaptım ve sonunda kontrolöre $ zaman aşımı bildirerek çalışmak lazım:

app.controller('ctrlDropdown', function ($scope, $timeout) { 

    $scope.isMainMenu = true; 
    $scope.isSubMenu = false; 
    $scope.links = ""; 
    $scope.subLinks = ""; 
    $scope.selectedLink = ""; 
    $scope.bStopPropagation = true; 

    ... 
} 
+0

Sevindim. – Matheno