我遇到问题,尽管列表正在更新,但ngRepeat不显示信息。ngRepeat没有更新,即使列表是
在下面的代码中,$scope.selectedImages
阵列被添加到使用文件输入选择图像时。它被设置为只有唯一的文件将被添加到selectedImages列表中(无重复)。
在函数结尾处,scope.selectedImages
将使用新值打印数组,但在视图中,ngRepeat不会添加具有图像名称的新列表项。
关于这个问题的其他问题说,$scope.$apply
应该解决这个问题,但对我来说不是这样。我是否错误地使用了它,或者有什么是我误解的。
编辑:查看1和查看2在单独的HTML页面,它们都依赖同一个控制器上。
视图1:
<input type="file" multiple accept="image/*" class="file-input" id="img-upload-btn" onchange="angular.element(this).scope().select(this)">
<md-button class="md-primary md-raised sidenav-btn" ng-click="proxy('img-upload-btn')">
Select <strong>Images</strong>
</md-button>
代理功能允许md-button
点击输入。
查看2:
<div layout-padding flex ng-controller="upload-controller">
<ul>
<li ng-repeat="im in selectedImages">{{im.name}}</li>
</ul>
</div>
控制器:
$scope.selectedImages = [];
$scope.select = function(element) {
$scope.$apply(function(scope) {
var justFiles = $.map(element.files, function(val, key) {
return val;
}, true);
var fileEquality = function(f1, f2) {
if (f1.name != f2.name) return false;
if (f1.size != f2.size) return false;
if (f1.type != f2.type) return false;
if (f1.lastModified != f2.lastModified) return false;
return true;
}
// inefficient, find better way later
for (i in justFiles) {
var contains = false;
var file = justFiles[i];
for (i in scope.selectedImages) {
if (fileEquality(file, scope.selectedImages[i])) {
contains = true;
break;
}
}
if (!contains) scope.selectedImages.push(file);
}
console.log(scope.selectedImages);
});
};
您的控制器中没有$ scope.uploadedImages!这个模型是空的! –
@HanArantes糟糕!我已经复制了该代码的旧版本。即使使用selectedImages,也会出现问题,并且不显示任何内容。我编辑了新的代码。 –