2017-03-22 89 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框架,我们需要执行适当的范围生命周期 异常处理,执行手表。