2016-03-03 69 views
0

美好的一天!javascript/angular - 無法獲得確切的回覆回覆數據

我剛剛註冊了stackoverflow,並提出了這個問題,因爲我一直在通過搜索這個龐大而真棒的網站來淘汰這個問題。不幸的是,他們的問題和解決方案似乎沒有幫助我。

這裏是我的短js代碼:

angular.module('myapp', []).controller('myController', ['$scope', '$http', '$window', function($scope,$http,$window) { 

...[more codes]... 

$scope.callMeMaybe = function(coverImageId) { 
    var THUMBNAIL_URL = './thumbnails/' + coverImageId; 
    var THUMBNAIL_DATA_URI = new String('data:image/jpg; base64, '); 
    var result = new String(''); 

    $http.get(THUMBNAIL_URL).then(function successCallback(response){ 
    var data = response.data; 
    result = new String(THUMBNAIL_DATA_URI.concat(data)); 
    $scope.loaded = true; 
    }, function errorCallback(response) { 
    $scope.loaded = false; 
    if (response.status === 403) { 
     $window.alert('You are forced logged out'); 
     $window.location = '/login/'; 
    } else { 
     $scope.elementBindingError(); 
    } 
    }); 
    console.log(result); 
    return result.valueOf(); 
}; 

... [some more codes] ... 
}]) 
.directive('myDirective', function(){ 
return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
    element.attr('src', scope.callMeMaybe(attrs.thumbnail)); 
    } 
} 
}); 

我似乎無法得到callMeMaybe功能級聯反應數據。 該指令是我的一部分<img>標記

回答

0

當你有ajax調用時要注意你要返回的東西,如果它依賴於ajax的成功結果,那麼你必須從成功回調本身返回結果,否則你如何期待成功的結果沒有被稱爲成功的情況下被退回。所以原型應該是類似於下面的東西

 $scope.callMeMaybe = function (coverImageId,functionCompleteCallBack) { //pass a new function into this, with this function we will set the element src 

     // ... your other stuff 

     $http.get(THUMBNAIL_URL).then(function successCallback(response) { 
      var data = response.data; 
      result = new String(THUMBNAIL_DATA_URI.concat(data)); 
      $scope.loaded = true; 

      functionCompleteCallBack(result.valueOf()); //You need to execute the function passed as a callback. 

     }, function errorCallback(response) { 
      $scope.loaded = false; 
      if (response.status === 403) { 
       $window.alert('You are forced logged out'); 
       $window.location = '/login/'; 
      } else { 
       $scope.elementBindingError(); 
      } 
     });   
    }; 

}]) 

      // ... your other stuff 

.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
      scope.callMeMaybe(attrs.thumbnail, function (elementSrc) { //note that we are passing a new function and set the element src inside this callback function 
       element.attr('src', elementSrc); 
      }); 
     } 
    } 
}); 

讓我知道如果你有任何混淆。

+1

是的。我只是意識到它是異步調用的。我只是在輸出之前和之後輸出日誌。 我明白你的解釋。 我會嘗試你的解決方案,如果我有一些困惑,回來。 –

+0

它的工作原理!謝謝。 –

0

這可能是由於異步調用而發生的。在獲得數據之前就會發生callMeMaybe的回報。當調用successCallback/errorCallback時,您只應返回result。另外,請確保範圍都是正確的 - 如果沒有HTML,則無法看到該部分。

+0

是的。我只是意識到它是異步調用的。我只是在輸出之前和之後輸出日誌。 –