angularjs使用组件上传文件

angularjs使用组件上传文件,angularjs,file,upload,components,Angularjs,File,Upload,Components,我试图上传文件使用角组件结构,但我无法获得选定的文件 步骤1:模板数据。 <form name="form"> Hello {{vm.name}} <br /> Upload: <input my-directive type="file" name="file" ng-model="files" /> <br /> <input type="button" ng-click='vm.uploadFile()'

我试图上传文件使用角组件结构,但我无法获得选定的文件

步骤1:模板数据。

<form name="form">
    Hello {{vm.name}} <br />
    Upload:     <input my-directive type="file" name="file" ng-model="files" /> <br />
    <input type="button" ng-click='vm.uploadFile()' value="Upload File." />
</form>

提前谢谢,我对angular是个新手:)

对不起,我没有注意到你在使用typescript。我还没有真正跟上ts的速度。前几天我用下面的代码回答了一个类似的问题,但我现在找不到。请注意,ng模型和文件输入类型存在问题,因此它使用document.getElementById来确定文件。我怀疑这就是你遇到的问题

<html>
<body>
  <form name="form" ng-app="app" ng-controller="Ctrl as ctrl">
    Upload file:
    <input type="file" id="file" ng-model="ctrl.file" />
    <br/>
    <br/> Enter text:
    <textarea id="textarea" ng-model="ctrl.text"></textarea>
    <br/>
    <br/>
    <button class="btn btn-primary btn-large" ng-click="ctrl.submitForm()">Submit</button>
  </form>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js">

</script>
<script>
  angular.module('app', []).controller('Ctrl', function() {

  var vm = this;
  vm.file = ""
  vm.text = ""

  vm.submitForm = function() {
    // angular doesn't update the model for input type="file"
    vm.file = document.getElementById('file').value;
    var retVal = false ;
    alert(vm.file);
    alert(vm.text);
    if (vm.file && ! vm.text) 
      {retVal = true}
    else if (vm.text && ! vm.file) 
       {retVal = true}
    else if (!vm.text && !vm.file) 
      {retVal = false}
    else if (vm.text && vm.file) 
      {retVal = false}

    if (!retVal) {
      alert("Please specify either a file or text, not both!")
    } else
      alert("ok")
  }
});

</script>

</html>

上载文件:


输入文本:

提交 角度.module('app',[]).controller('Ctrl',function(){ var vm=这个; vm.file=“” vm.text=“” vm.submitForm=函数(){ //angular不更新输入类型=“文件”的模型 vm.file=document.getElementById('file').value; var-retVal=false; 警报(vm.file); 警报(vm.text); if(vm.file&&!vm.text) {retVal=true} else if(vm.text&&!vm.file) {retVal=true} else如果(!vm.text&&!vm.file) {retVal=false} else if(vm.text&&vm.file) {retVal=false} 如果(!retVal){ 警报(“请指定一个文件或文本,而不是同时指定两个!”) }否则 警报(“正常”) } });
对不起,我没有注意到您正在使用typescript。我还没有真正跟上ts的速度。前几天我用下面的代码回答了一个类似的问题,但我现在找不到。请注意,ng模型和文件输入类型存在问题,因此它使用document.getElementById来确定文件。我怀疑这就是你遇到的问题

<html>
<body>
  <form name="form" ng-app="app" ng-controller="Ctrl as ctrl">
    Upload file:
    <input type="file" id="file" ng-model="ctrl.file" />
    <br/>
    <br/> Enter text:
    <textarea id="textarea" ng-model="ctrl.text"></textarea>
    <br/>
    <br/>
    <button class="btn btn-primary btn-large" ng-click="ctrl.submitForm()">Submit</button>
  </form>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js">

</script>
<script>
  angular.module('app', []).controller('Ctrl', function() {

  var vm = this;
  vm.file = ""
  vm.text = ""

  vm.submitForm = function() {
    // angular doesn't update the model for input type="file"
    vm.file = document.getElementById('file').value;
    var retVal = false ;
    alert(vm.file);
    alert(vm.text);
    if (vm.file && ! vm.text) 
      {retVal = true}
    else if (vm.text && ! vm.file) 
       {retVal = true}
    else if (!vm.text && !vm.file) 
      {retVal = false}
    else if (vm.text && vm.file) 
      {retVal = false}

    if (!retVal) {
      alert("Please specify either a file or text, not both!")
    } else
      alert("ok")
  }
});

</script>

</html>

上载文件:


输入文本:

提交 角度.module('app',[]).controller('Ctrl',function(){ var vm=这个; vm.file=“” vm.text=“” vm.submitForm=函数(){ //angular不更新输入类型=“文件”的模型 vm.file=document.getElementById('file').value; var-retVal=false; 警报(vm.file); 警报(vm.text); if(vm.file&&!vm.text) {retVal=true} else if(vm.text&&!vm.file) {retVal=true} else如果(!vm.text&&!vm.file) {retVal=false} else if(vm.text&&vm.file) {retVal=false} 如果(!retVal){ 警报(“请指定一个文件或文本,而不是同时指定两个!”) }否则 警报(“正常”) } });
你能把这个放在密码笔里吗?好的。我还没用过,但我会试试的!代码笔真的很容易。当你完成后发布回复,这样我会得到通知,我会看一看。尝试此链接。请告诉我,如果你在访问链接时遇到任何问题。你能将此放在代码笔中吗?好的。我还没用过,但我会试试的!代码笔真的很容易。当你完成后发布回复,以便我得到通知,我会看一看。尝试此链接。如果你在访问此链接时遇到任何问题,请告诉我。此答案中还有一些好的解决方案:此答案中也有一些好的解决方案: