2016-12-04 38 views
0
$scope.clickfunction = function(arg){ 
    var url =""; 
    var httppromise = $scope.promiseufunction(arg); // return a http promise 
    httppromise.then(function(res){ 
    if(res){ 
     url ="path/" 
     $('#htmlelement').attr('href', url); 
     }else{ 
     url="path2/" 
      $('#htmlelement').attr('href', url); 
     }; 
     }); 
     } //<---- this line execute before the inner function of promise.then 

我有一個錨定標記與ng-click調用上述clickfunction函數。 我依賴於解決和更新href屬性的承諾,但是我發現函數的末尾已經到達promise.then()的innner函數之前,並且導致我的ng-click無法正常工作,如我所料,href在href上的ng-click事件之後更新屬性。函數結束之前angularjs承諾解決

怎樣才能解決這個問題,以確保前承諾工作的內部函數實現這一功能的結束?

+2

這是怎麼了異步編程工作。內部'then'函數在HTTP請求完成後的稍後階段被調用。 – ZeMoon

+0

是否會運行代碼?它似乎有語法錯誤 – Mohayemin

+0

謝謝。我變了,我怎麼能改寫這個工作,我的任何建議適當第一READ NG單擊 – GlassMan

回答

0

你可以使用ng-href一旦承諾解決更新HREF。 這是一個模擬的概念。

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>

因此,保持上面的方法爲參考,可以使用在#htmlElement ngHRef爲使用填充使用一個承諾值的模型屬性。

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

感謝傢伙。我終於發現我的問題是因爲該href atrribute比ng-click具有更高的優先級。我使用window.location代替更新href attrbute – GlassMan

相關問題