【发布时间】:2015-06-28 04:32:49
【问题描述】:
我正在尝试显示用户使用 input[type=file] 选择的文件列表。
HTML
<div ng-app="myApp">
<div ng-controller="UploadFilesCtrl">
<input type="file" onchange="angular.element(this).scope().uploadFiles(this)" multiple />
<ul>
<li ng-repeat="name in filenames">
{{name}}
</li>
</ul>
<button ng-click="test()">PRINT</button>
</div>
</div>
JS
app = angular.module('myApp');
app.controller('UploadFilesCtrl', ['$scope', function($scope){
$scope.uploadFiles = function(element){
var files = element.files;
var filenames=[];
for (i=0; i<files.length; i++){
filenames.push(files[i].name);
}
$scope.files = files;
$scope.filenames = filenames;
console.log(files, filenames);
};
$scope.test = function(){
console.log($scope.files, $scope.filenames);
}
}]);
由于某种原因,列表永远不会更新。
$scope 中的 filenames 和 files 变量永远不会在 uploadFiles 函数之外更新(当我在选择文件后单击 PRINT 按钮时,我得到 undefined)。
有什么想法吗?
谢谢!
【问题讨论】:
-
angular.element(this).scope().uploadFiles(this)我想这不会导致角度摘要。这似乎是directive的工作,但同时您可以尝试$scope.$apply(function() { $scope.files = files; });看看它是否真的是一个摘要问题 -
我刚刚找到了你从这个 sn-p 得到的答案。在假设接受的答案是正确的之前,您应该read the comments :)
-
你有什么错误吗?
-
$scope.apply由于某种原因没有完成这项工作。我最终试图创建一个指令。谢谢! -
这在 Crome 和 IE 中可以正常工作,但在 Firefox 中无法正常工作,它会给出类似 TypeError: angular.element(...).scope(...).uploadFiles is not a function
标签: javascript angularjs angularjs-scope angularjs-ng-repeat