我使用角度js将图像上传到Amazon S3。
我的Controller.js - [controller.admin.main]
var req = bucket.putObject(params).on('httpUploadProgress', function(progress) {
$scope.progress = Math.round((progress.loaded * 100.0) / progress.total);
/* LINE 1 */ console.log($scope.progress);
}).send(function(err, data) {
console.log("FINISHED");
if (err) {
console.log(err.message);
return false;
} else {
console.log('File Uploaded Successfully');
}
});
我的HTML页面
<div ng-show="progressVisible">
<!--Line 2--> <div class="percent">{{progress}}%</div>
<div class="progress-bar">
<!-- Line 3 --> <div class="uploaded" ng-style="{width: {{progress}}%}"></div>
</div>
</div>
在第2行和第3行,随着更新的进行,我没有更新'progress'范围变量。但是我在第1行CONSOLE.LOG语句中看到了正确的输出。
为什么范围变量没有连接到html?我通过'states.js'
正确地将此控制器连接到我的html页面**states.js**
.state("admin", {
url: '',
template: "../../../views/admin/home.html",
controller: 'controller.admin.main'
})
我的控制器中有其他功能说'上传'正在从我的html中正确调用。这样可以确保控制器正确连接到html页面。但是为什么$ scope.progress变量值变化没有反映在我的html页面中。有人请帮忙。我被困了两天。
感谢。
答案 0 :(得分:1)
当范围更改时调用$scope.$apply()
$scope.progress = Math.round((progress.loaded * 100.0) / progress.total);
if(!$scope.$$phase) {
$scope.$apply()
}
因为可能在angularjs范围之外调用upload函数。调用$scope.$apply()
将导致摘要周期运行,以便视图更改