2017-03-22 117 views
0

我有一個$scope字段,我在一個<img>:AngularJS範圍不會注意到變化

$scope.imageDataUrl 

的字段使用一個ng-src屬性如下初始化:

$scope.myJsWrapper = new MyJsWrapper(); 
$scope.myJsWrapper.getImageUrl(function (imageDataUrl) { 
    $scope.imageDataUrl = imageDataUrl; 
}); 

在這裏,外部JS功能:

function MyJsWrapper() { 
    this.getImageUrl = function (withImage) { 
     thirdPartyJsFile.getData().then(function (data) { 
      var imageDataUrl = thirdPartyJsFile.getDataUrl(data, "image/png"); 
      if (withImage) { 
       withImage(imageDataUrl); 
      } 
     }); 
    } 
} 

這是一種複雜的方式,但是第三方應用程序迫使我這樣做。 我的問題是,不知何故角沒有注意到字段imageDataUrl的變化。所以圖像不會更新。 我甚至試圖爲$scope.$watch該字段,但它沒有被觸發。 有趣的是,當我在瀏覽器中滾動或點擊任何地方(以及$scope.$watch)時,它會發生變化。

爲什麼角度不能識別字段變化,我該怎麼做才能使它工作?

+2

您是否嘗試在更改圖像源後調用'$ scope。$ apply()'? –

回答

4

,如果它是更新$scope,讓角上下文知道你的改變,你需要調用$scope.$apply()

$scope.$apply(function() { 
    $scope.imageDataUrl = imageDataUrl; 
}); 

在回調

docs

一個thirdy黨庫

$apply()用於在 之外執行AngularJS中的表達式An gularJS框架。 (例如,來自瀏覽器DOM事件, setTimeout,XHR或第三方庫)。因爲我們正在調用 AngularJS框架,我們需要執行適當的範圍生命週期 異常處理,執行手錶。