我正在尝试在文件输入变化时运行我的upload()
函数。但是,我无法使它工作。
HTML:
<input type="file" ng-model="image" ng-change="uploadImage()">
JS:
-->JavaScript:
$scope.uploadImage = function() {
console.log('Changed');
}
我做错了什么?
我正在尝试在文件输入变化时运行我的upload()
函数。但是,我无法使它工作。
HTML:
<input type="file" ng-model="image" ng-change="uploadImage()">
JS:
-->JavaScript:
$scope.uploadImage = function() {
console.log('Changed');
}
我做错了什么?
JS:-
function myCtrl($scope) {
$scope.uploadImage = function () {
console.log("Changed");
}
}
HTML:-
<div ng-app ng-controller="myCtrl">
<input type="file" ng-model="image" onchange="angular.element(this).scope().uploadImage()" />
</div>
angular.element(this).scope().XXX()
而不是XXX()
..除了能够正常工作之外,还有其他原因吗? - sports我制作了一个指令来完成你所要求的功能。如果我没有错的话,我认为其他解决方案在生产模式下无法工作,但是这个可以。它的使用方法如下:
<input ng-upload-change="fileChanged($event)" />
在你的控制器中:
$scope.fileChanged = function($event){
var files = $event.target.files;
}
还有一个指令需要包含在你的代码中:
angular.module("YOUR_APP_NAME").directive("ngUploadChange",function(){
return{
scope:{
ngUploadChange:"&"
},
link:function($scope, $element, $attrs){
$element.on("change",function(event){
$scope.$apply(function(){
$scope.ngUploadChange({$event: event})
})
})
$scope.$on("$destroy",function(){
$element.off();
});
}
}
});
这段代码已经发布到公共领域,无需归属。
你还需要知道的是,如果有人选择了一个文件,关闭了文件输入,然后稍后再次选择同一个文件,它不会再次触发更改函数。为了解决这个问题,我创建了一个更完整的指令,每次使用它时都会在幕后替换输入。我在这里将它放在github上:
另一种有趣的监听文件输入变化的方法是通过对输入文件的ng-model属性进行监视。
像这样:
HTML -> <input type="file" file-model="change.fnEvidence">
JS代码 ->
$scope.$watch('change.fnEvidence', function() {
alert("has changed");
});
使用 ng-file-select="upload($files)"
'<input type="file" class="form-control" ng-model="alunos.file" accept="image/*" ng-file-select="upload($files)"/>'
其中upload是一个函数:$scope.upload = function(file){
console.log(file);
};