我使用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
,但没有用,有人可以帮我吗?
答案 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]); }); }); } }; }]);