使用 ngRepeat 和 ng-src 时看不到要上传的图像预览
Can't see Preview of Image to Upload when using ngRepeat and ng-src
我已经创建了一个 CodePen example 我的问题。
我正在使用 HTML5 FileReader
和 Angular 创建一个简单的多文件上传,其中包含要上传的图像的预览。
问题:
我没有在 ng-repeat
范围内获取选定的图像。但是,当我将其注销到控制台时,我确实获得了正确的图像数据……我做错了什么?
HTML:
<div class="container" ng-app="my.app" ng-controller="FileUploadController">
<div class="row">
<div class="page-header">
<h3>File Upload Test</h3>
</div>
<input type="file" class="well" id="files" name="files[]" multiple onchange="angular.element(this).scope().upload()" />
<span ng-repeat="x in images">
<img ng-src="{{x}}" />
</span>
</div>
</div>
CSS:
img {
max-height: 100px;
}
Javascript:
var app = angular.module("my.app", []);
app.controller("FileUploadController", function($scope) {
$scope.images = [];
$scope.upload = function() {
var files = document.getElementById("files").files;
if (files) {
for (i = 0; i < files.length; i++) {
if (files[i]) {
var reader = new FileReader();
reader.onload = function (e) {
console.log(e.target.result);
$scope.images.push(e.target.result);
}
reader.readAsDataURL(files[i]);
}
}
}
};
})
http://jsfiddle.net/orion514/kkhxsgLu/136/ 具有相同的工作实现。
<div ng-repeat="x in images">
<img class="thumb" ng-src="{{x}}" />
$scope.images = [];
$scope.imageUpload = function(event){
var files = event.target.files; //FileList object
for (var i = 0; i < files.length; i++) {
var file = files[i];
var reader = new FileReader();
reader.onload = $scope.imageIsLoaded;
reader.readAsDataURL(file);
}
$scope.imageIsLoaded = function(e){
$scope.$apply(function() {
$scope.images.push(e.target.result);
});
}
}
尝试 $scope.$apply()
当您像下面这样修改集合时,
reader.onload = function (e) {
console.log(e.target.result);
$scope.images.push(e.target.result);
$scope.$apply();
}
我已经创建了一个 CodePen example 我的问题。
我正在使用 HTML5 FileReader
和 Angular 创建一个简单的多文件上传,其中包含要上传的图像的预览。
问题:
我没有在 ng-repeat
范围内获取选定的图像。但是,当我将其注销到控制台时,我确实获得了正确的图像数据……我做错了什么?
HTML:
<div class="container" ng-app="my.app" ng-controller="FileUploadController">
<div class="row">
<div class="page-header">
<h3>File Upload Test</h3>
</div>
<input type="file" class="well" id="files" name="files[]" multiple onchange="angular.element(this).scope().upload()" />
<span ng-repeat="x in images">
<img ng-src="{{x}}" />
</span>
</div>
</div>
CSS:
img {
max-height: 100px;
}
Javascript:
var app = angular.module("my.app", []);
app.controller("FileUploadController", function($scope) {
$scope.images = [];
$scope.upload = function() {
var files = document.getElementById("files").files;
if (files) {
for (i = 0; i < files.length; i++) {
if (files[i]) {
var reader = new FileReader();
reader.onload = function (e) {
console.log(e.target.result);
$scope.images.push(e.target.result);
}
reader.readAsDataURL(files[i]);
}
}
}
};
})
http://jsfiddle.net/orion514/kkhxsgLu/136/ 具有相同的工作实现。
<div ng-repeat="x in images">
<img class="thumb" ng-src="{{x}}" />
$scope.images = [];
$scope.imageUpload = function(event){
var files = event.target.files; //FileList object
for (var i = 0; i < files.length; i++) {
var file = files[i];
var reader = new FileReader();
reader.onload = $scope.imageIsLoaded;
reader.readAsDataURL(file);
}
$scope.imageIsLoaded = function(e){
$scope.$apply(function() {
$scope.images.push(e.target.result);
});
}
}
尝试 $scope.$apply()
当您像下面这样修改集合时,
reader.onload = function (e) {
console.log(e.target.result);
$scope.images.push(e.target.result);
$scope.$apply();
}