使用fileModel无法在angularjs中上载两次相同的文件

时间:2017-07-14 10:09:35

标签: angularjs file-upload

我使用angular js fileModel指令上传文件,如下所示

scala> val df = Seq(2.0,3.0,3.2,2.3,1.2).toDF("col")
df: org.apache.spark.sql.DataFrame = [col: double]

scala> import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.Vectors

scala> val rows = df.rdd
rows: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[3] at rdd at <console>:31

scala> val doubVals = rows.map{ row =>   row.getDouble(0) }
doubVals: org.apache.spark.rdd.RDD[Double] = MapPartitionsRDD[4] at map at <console>:33

scala> val vector = Vectors.dense{ doubVals.collect}
vector: org.apache.spark.mllib.linalg.Vector = [2.0,3.0,3.2,2.3,1.2] 

我在html中使用相同的内容,

angular.module('MyProject').directive('fileModel', ['$parse', function ($parse) {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var model = $parse(attrs.fileModel);
            var modelSetter = model.assign;
            element.bind('change', function(){
                scope.$apply(function(){
                    modelSetter(scope, element[0].files[0]);
                });
            });
        }
    };
}]);

如果我选择一个文件,那么我可以使用 <input type='file' class="imgInp" file-model="tenantLogoFile"/> on&#34; tenantLogoFile&#34;来捕获用户选择的文件。但如果我应该立即上传同一个文件(没有刷新页面),$watch不会被解雇,最终我无法上传文件。

我在第一次成功上传后尝试设置$watch,但没有用,有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

无论如何,我找到了一个解决方法如下,

<input type='file' file-model="myFile" ng-click="clearFileSelection();"/>

我在控制器中编写了一个名为“clearFileSelection”的函数,并在每次后续单击文件选择器按钮时调用它,以便清除以前的文件内容,功能代码如下。

$scope.clearFileSelection = function(){
        angular.element("input[type='file']").val(null);
    }

我希望这肯定会帮助像我这样的其他挣扎者...... Happyyy Coding .. !!

答案 1 :(得分:0)

您无需更改HTML或控制器。由于您的指令仅限于属性。在这种情况下,最好使用element.on('click',fn)。

angular.module('MyProject')。directive('fileModel',['$ parse',function($ parse){ 返回{ 限制:“ A”, 链接:function(scope,element,attrs){ var model = $ parse(attrs.fileModel); var modelSetter = model.assign; element.on('click',function(){ angular.element(“ input [type ='file']”)。val(null); }); element.bind('change',function(){ scope。$ apply(function(){ modelSetter(scope,element [0] .files [0]); }); }); } }; }]);