2016-12-04 4 views
0

Ich habe ein Anker-Tag mit ng-Klick, die die oben genannte Clickfunction-Funktion aufruft. Ich verlasse mich auf das Versprechen, das href-Attribut aufzulösen und zu aktualisieren, aber ich habe festgestellt, dass das Ende der Funktion vor der innner-Funktion von promise.then() erreicht wurde, und das bewirkt, dass mein ng-Klick nicht richtig funktioniert, wie ich es erwartet habe Attribut wird nach dem ng-click-Ereignis in href aktualisiert.Funktion Ende vor angularjs Versprechen auflösen

Wie kann dies gelöst werden, um sicherzustellen, dass die innere Funktion des Versprechens funktioniert, bevor das Ende dieser Funktion erreicht wird?

+2

Dies ist, wie asynchrone Programmierung funktioniert. Die innere "then" -Funktion wird zu einem späteren Zeitpunkt aufgerufen, nachdem Ihre HTTP-Anfrage abgeschlossen wurde. – ZeMoon

+0

läuft dein Code? Es scheint Syntaxfehler zu haben – Mohayemin

+0

Danke. Ich änderte, jeden Vorschlag, wie könnte ich dies neu schreiben, um meine ng-Klick richtig zu arbeiten – GlassMan

Antwort

0

Sie könnten ng-href verwenden, um die href zu aktualisieren, sobald das Versprechen gelöst wurde. Hier ist eine Simulation des Konzepts. So

var app = angular.module("sampleApp", []); 
 

 
app.controller("sampleController", ["$scope", "$timeout", 
 
    function($scope, $timeout) { 
 
    // Simulating the variable update at a later point. 
 
    $timeout(function() { 
 
     $scope.testUrl = "http://stackoverflow.com"; 
 
    }, 3000) 
 
    } 
 
]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> 
 
<div ng-app="sampleApp"> 
 
    <div ng-controller="sampleController as vm"> 
 
    <a ng-href="{{testUrl}}">Google</a> 
 
    </div>

, die obige Art und Weise als Referenz zu halten, könnten Sie ngHRef auf dem #htmlElement Verwendung als Modell Eigenschaft, die den Wert mit einem Versprechen auffüllt.

HTML

<a ng-href="newHref">Some anchor </a> 

JS

$scope.clickfunction = function(arg) { 
    var url = ""; 
    var httppromise = $scope.promiseufunction(arg); // return a http promise 
    httppromise.then(function(res) { 
    if (res) { 
     url = "path/"; 
    } else { 
     url = "path2/" 
    }; 
    $scope.newHref = url; 
    }); 
} 
+0

danke kerl. Ich fand schließlich mein Problem ist, weil diese href atrribute höhere Priorität als ng-click.i window.location nimmt, anstatt die href attrbute zu aktualisieren – GlassMan

Verwandte Themen