2017-05-05 5 views
1

ich eine einfache modale haben, die auf einem Zustand ausgelöst wird, der eine Meldung zeigt wie ..Auslöser ein modaler ohne eine Schaltfläche klicken in AngularJS

html:

<div ng-if="getGuestModal()"></div> 

Controller:

$scope.guestIndicator = function() { 
    return true; 
    }; 

    $scope.guestModal = function() { 
     $modal.open({ 
      animation: true, 
      controller: guestModalController 
      templateUrl: "./guestModal.html" 
     }); 
    }; 

    $scope.getGuestModal = function() { 
    if ($scope.guestIndicator()) { 
     $scope.guestModal(); 
    } 
    }; 

Fehler: "Uncaught Error: [$ rootScope: infdig] 10 $ digest() Iterationen erreicht. Abbruch!"

irgendwelche Ideen?

+0

können Sie einen PLNR erstellen –

+0

Welche Art von Auslöser suchen Sie? Sie könnten es automatisch mit etwas wie 'setTimeout()' anzeigen lassen. – Naltroc

+0

Ich möchte, dass es ausgelöst wird, wenn mein ng-if = "getGuestModa()" wahr ist ... also wo soll ich in diesem Fall setTimeout() setzen? – jeremy

Antwort

1

Vielleicht nur einige der Codekomplexität reduziert wird dieses Problem beheben ...

<div ng-if="getGuestModal()"></div> 

Im div haben Sie eine Funktion, die beim Laden der Seite ausgeführt wird. Die Funktion gibt undefinierten, die falsy ist, so ng-Wert, wenn"false" sein wird; niemals wahr.

Wenn Sie Ihre Funktion getGuestModal auf Seite Last zu schießen, wie es mit der ng-wenn, dann vielleicht in Ihrem Controller konnte man dies nur tun ...

// Controller... 

if(guestIndicator()){ 
    $scope.guestModal(); 
} 

Ich vermute Ihr Div ist NICHT Ihre tatsächliche HTML für das modale, nur Ihr Haken, um die Funktion zu aktivieren, um Ihre Logik zu feuern.

Eine weitere Möglichkeit, dies tun könntest, ist nur Ihre Modal in der Ansicht einer Verbindung mit seinem eigenen benutzerdefinierter Richtlinie, so etwas wie

<my-modal ng-if="isGuest"></my-modal> 

und dann in Ihrem Controller etwas auf Last so ...

// Controller... 

$scope.isGuest = myLogicFunctionThatReturnsABoolean(); 

In your custom directive...

app.directive("myModal",... 

    return { 
    restrict: "E", 
    boiler plate.... 
    controller: function($scope){ 
     $modal.open({ 
     animation: true, 
     controller: guestModalController 
     templateUrl: "./guestModal.html" 
     }); 
    } 
    } 

Another thing to mention...

Ein Modal befindet sich normalerweise im gerenderten Dom, auch wenn es nicht angezeigt wird, dann rufen Sie es einfach mit einem booleschen Wert auf, wenn es in der Logik oder mit einer Schaltfläche oder einem Link angezeigt werden soll.

+1

hey dude danke für die aufwendige antwort !! endete mit der ersten Option ... obwohl die Richtlinie wäre schön, später zu implementieren – jeremy

Verwandte Themen