Javascript AngularJS范围没有注意到更改
我有一个Javascript AngularJS范围没有注意到更改,javascript,angularjs,Javascript,Angularjs,我有一个$scope字段,用于中的ng src属性: 该字段初始化如下: $scope.myJsWrapper = new MyJsWrapper(); $scope.myJsWrapper.getImageUrl(function (imageDataUrl) { $scope.imageDataUrl = imageDataUrl; }); 下面是外部JS函数: function MyJsWrapper() { this.getImageUrl = function (wi
$scope
字段,用于中的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);
}
});
}
}
这是一个复杂的方式,但第三方应用程序迫使我这样做。
我的问题是angular没有注意到字段imageDataUrl
的变化。因此图像不会更新。
我甚至尝试了该字段的$scope.$watch
,但没有触发。
有趣的是,当我在浏览器中滚动或单击任意位置(以及$scope.$watch
)时,它会发生变化
为什么angular无法识别字段更改,我需要做什么才能使其工作?如果是第三方库正在更新您的
$scope
,为了让angular上下文知道您的更改,您需要调用$scope.$apply()
在你的回电中
看
$apply()
用于从外部执行AngularJS中的表达式
AngularJS框架。(例如,从浏览器DOM事件,
setTimeout、XHR或第三方库)。因为我们正在召唤
我们需要AngularJS框架来执行适当的范围生命周期
异常处理,执行监视
如果第三方库正在更新您的
$scope
,为了让angular context知道您的更改,您需要调用$scope.$apply()
在你的回电中
看
$apply()
用于从外部执行AngularJS中的表达式
AngularJS框架。(例如,从浏览器DOM事件,
setTimeout、XHR或第三方库)。因为我们正在召唤
我们需要AngularJS框架来执行适当的范围生命周期
异常处理,执行监视
更改图像源后是否尝试调用
$scope.$apply()
?更改图像源后是否尝试调用$scope.$apply()
?
function MyJsWrapper() {
this.getImageUrl = function (withImage) {
thirdPartyJsFile.getData().then(function (data) {
var imageDataUrl = thirdPartyJsFile.getDataUrl(data, "image/png");
if (withImage) {
withImage(imageDataUrl);
}
});
}
}
$scope.$apply(function() {
$scope.imageDataUrl = imageDataUrl;
});