极其简单的AngularJs文件选择对话框
在你的实际代码中,$scope.myFile.name
将包含文件名。这个变量通过你定义的指令fileModel
与file-model
绑定到标签上。
<div ng-controller = "myCtrl">
文件名:{{myFile.name}}<br>
<input type="file" file-model="myFile"/>
<button ng-click="uploadFile()">上传文件</button>
</div>
$scope.uploadFile = function(){ var file = $scope.myFile; // $scope.myFile is set buy the directive console.log('file is ' + $scope.myFile.name ); var uploadUrl = "/fileUpload"; fileUpload.uploadFileToUrl(file, uploadUrl); };
请问您是如何知道的?
你的初始代码已经包含了答案,第39行的console.dir(file)
清楚地显示了file.name
包含的文件名。至于ng-model="filename"
,这是AngularJS的工作原理。要说这个输入框与这个变量绑定,你使用ng-model="varname"
,如果你不知道这一点,我觉得你应该阅读官方的Angular教程,你会节省很多时间,并看到很多好的特性:https://docs.angularjs.org/tutorial/step_00 最好的祝福
我看不到$scope.filename
和file.name
之间的联系,后者不在$scope
中。而且它是file DOT name
,所以与$scope.filename
没有关系
它们之间没有联系,我读得太快了你的代码,并添加了另一个变量绑定,这是多余的,因为已经有一个变量通过同名的指令file-model
绑定到输入框上。我编辑了答案
它似乎还没有更新$scope.myFile
(我甚至需要那个指令吗?我不明白为什么它说myApp.directive('fileModel'
而在file-model="myFile"
中使用了连字符)
这是Angular的自动机制,它将驼峰命名(指令名为fileModel
)转换为HTML属性中的file-model
。我总是使用简单的减号来避免这个问题。编辑:这里有一些阅读材料,有更多解释:http://adndevblog.typepad.com/cloud_and_mobile/2015/08/should-we-use-camelcase-or-dash-delimited-in-angularjs.html
这非常有帮助(我是新手,对于指令一点都不了解)。这是一个很好的答案和解释,为本站树立了榜样。
很高兴能帮到你。指令非常强大,关于如何向指令传递数据(字符串/对象、函数等),这里有一个小提示:http://pastebin.com/VBkhbt4b