Angularjs var params={event:event,el:element}; 处理程序({params:params}); }); }); } }; }]);

Angularjs var params={event:event,el:element}; 处理程序({params:params}); }); }); } }; }]);,angularjs,Angularjs,该指令可以多次使用,它使用自己的作用域,不依赖于父作用域。您还可以为handler函数提供一些参数。将使用范围对象调用处理程序函数,该对象在更改输入时处于活动状态。 $apply每次调用更改事件时都会更新您的模型,这是最简单的jqLite版本 JS: HTML: 最简单的角度jqLite版本 JS: HTML: 我扩展了@Stuart Axon为文件输入添加双向绑定的想法(即允许通过将模型值重置回null来重置输入): 我扩展了@Stuart Axon为文件输入添加双向绑定的想法(即允许通过将模

该指令可以多次使用,它使用自己的作用域,不依赖于父作用域。您还可以为handler函数提供一些参数。将使用范围对象调用处理程序函数,该对象在更改输入时处于活动状态。
$apply每次调用更改事件时都会更新您的模型,这是最简单的jqLite版本

JS:

HTML:


最简单的角度jqLite版本

JS:

HTML:


我扩展了@Stuart Axon为文件输入添加双向绑定的想法(即允许通过将模型值重置回null来重置输入):


我扩展了@Stuart Axon为文件输入添加双向绑定的想法(即允许通过将模型值重置回null来重置输入):


太完整的解决方案基于:

`onchange="angular.element(this).scope().UpLoadFile(this.files)"`
一种隐藏输入字段并用图像替换的简单方法,这里是解决方案之后的一种方法,该方法也需要对angular进行黑客攻击,但可以完成此任务[TriggerEvent未按预期工作]

解决方案:

  • 将输入字段置于display:none[输入字段存在于DOM中但不可见]
  • 把你的照片放在后面 在图像上,使用nb-click()激活一个方法
单击图像时,在输入字段上模拟DOM操作“单击”。瞧

 var tmpl = '<input type="file" id="{{name}}-filein"' + 
             'onchange="angular.element(this).scope().UpLoadFile(this.files)"' +
             ' multiple accept="{{mime}}/*" style="display:none" placeholder="{{placeholder}}">'+
             ' <img id="{{name}}-img" src="{{icon}}" ng-click="clicked()">' +
             '';
   // Image was clicked let's simulate an input (file) click
   scope.inputElem = elem.find('input'); // find input in directive
   scope.clicked = function () {
         console.log ('Image clicked');
         scope.inputElem[0].click(); // Warning Angular TriggerEvent does not work!!!
    };
var tmpl=''+
' ' +
'';
//图像已单击让我们模拟输入(文件)单击
scope.inputElem=elem.find('input');//在指令中查找输入
scope.clicked=函数(){
console.log(“单击图像”);
scope.inputElem[0]。单击();//警告角度触发器事件不工作!!!
};

太完整的解决方案基于:

`onchange="angular.element(this).scope().UpLoadFile(this.files)"`
一种隐藏输入字段并用图像替换的简单方法,这里是解决方案之后的一种方法,该方法也需要对angular进行黑客攻击,但可以完成此任务[TriggerEvent未按预期工作]

解决方案:

  • 将输入字段置于display:none[输入字段存在于DOM中但不可见]
  • 把你的照片放在后面 在图像上,使用nb-click()激活一个方法
单击图像时,在输入字段上模拟DOM操作“单击”。瞧

 var tmpl = '<input type="file" id="{{name}}-filein"' + 
             'onchange="angular.element(this).scope().UpLoadFile(this.files)"' +
             ' multiple accept="{{mime}}/*" style="display:none" placeholder="{{placeholder}}">'+
             ' <img id="{{name}}-img" src="{{icon}}" ng-click="clicked()">' +
             '';
   // Image was clicked let's simulate an input (file) click
   scope.inputElem = elem.find('input'); // find input in directive
   scope.clicked = function () {
         console.log ('Image clicked');
         scope.inputElem[0].click(); // Warning Angular TriggerEvent does not work!!!
    };
var tmpl=''+
' ' +
'';
//图像已单击让我们模拟输入(文件)单击
scope.inputElem=elem.find('input');//在指令中查找输入
scope.clicked=函数(){
console.log(“单击图像”);
scope.inputElem[0]。单击();//警告角度触发器事件不工作!!!
};

我是这样做的

<!-- HTML -->
<button id="uploadFileButton" class="btn btn-info" ng-click="vm.upload()">    
<span  class="fa fa-paperclip"></span></button>
<input type="file" id="txtUploadFile" name="fileInput" style="display: none;" />

我是这样做的

<!-- HTML -->
<button id="uploadFileButton" class="btn btn-info" ng-click="vm.upload()">    
<span  class="fa fa-paperclip"></span></button>
<input type="file" id="txtUploadFile" name="fileInput" style="display: none;" />

此指令还将传递选定的文件:

/**
 *File Input - custom call when the file has changed
 */
.directive('onFileChange', function() {
  return {
    restrict: 'A',
    link: function (scope, element, attrs) {
      var onChangeHandler = scope.$eval(attrs.onFileChange);

      element.bind('change', function() {
        scope.$apply(function() {
          var files = element[0].files;
          if (files) {
            onChangeHandler(files);
          }
        });
      });

    }
  };
});
HTML,如何使用它:

<input type="file" ng-model="file" on-file-change="onFilesSelected">

此指令还将传递选定的文件:

/**
 *File Input - custom call when the file has changed
 */
.directive('onFileChange', function() {
  return {
    restrict: 'A',
    link: function (scope, element, attrs) {
      var onChangeHandler = scope.$eval(attrs.onFileChange);

      element.bind('change', function() {
        scope.$apply(function() {
          var files = element[0].files;
          if (files) {
            onChangeHandler(files);
          }
        });
      });

    }
  };
});
HTML,如何使用它:

<input type="file" ng-model="file" on-file-change="onFilesSelected">

另一种侦听文件输入更改的有趣方法是监视输入文件的ng model属性。Off-course FileModel是一个自定义指令

<input type="file" files-input ng-model="fileList" 
       ng-change="onInputChange()" multiple />
像这样:

HTML->

JS代码->

$scope.$watch('change.fnEvidence', function() {
                    alert("has changed");
                });

希望它能帮助一些人。

另一种收听文件输入更改的有趣方式是监视输入文件的ng模型属性。Off-course FileModel是一个自定义指令

<input type="file" files-input ng-model="fileList" 
       ng-change="onInputChange()" multiple />
像这样:

HTML->

JS代码->

$scope.$watch('change.fnEvidence', function() {
                    alert("has changed");
                });
希望它能帮助一些人。

ng change一起工作的“files input”指令的工作演示
要使
元素在指令中工作,它需要一个与指令一起工作的元素

<input type="file" files-input ng-model="fileList" 
       ng-change="onInputChange()" multiple />

AngularJS输入`type=file`Demo
文件夹
{{file.name}
ng change一起工作的“文件输入”指令的工作演示
要使
元素在指令中工作,它需要一个与指令一起工作的元素

<input type="file" files-input ng-model="fileList" 
       ng-change="onInputChange()" multiple />

AngularJS输入`type=file`Demo
文件夹
{{file.name}
角度元素(如指令的根元素)是jQuery[Lite]对象。这意味着我们可以像这样注册事件侦听器:

link($scope, $el) {
    const fileInputSelector = '.my-file-input'

    function setFile() {
        // access file via $el.find(fileInputSelector).get(0).files[0]
    }

    $el.on('change', fileInputSelector, setFile)
}
这是jQuery事件委派。这里,监听器被附加到指令的根元素。当事件被触发时,它将冒泡到注册的元素,jQuery将确定事件是否起源于与定义的选择器匹配的内部元素。如果是,处理程序将启动

这种方法的好处是:

  • 处理程序绑定到$元素,当指令作用域被销毁时,该元素将被自动清除
  • 模板中没有代码
  • 即使在注册事件处理程序时尚未呈现目标委托(输入)(例如,在使用
    ng if
    ng开关
    时),也将工作

角度元素(如指令的根元素)是jQuery[Lite]对象。这意味着我们可以像这样注册事件侦听器:

link($scope, $el) {
    const fileInputSelector = '.my-file-input'

    function setFile() {
        // access file via $el.find(fileInputSelector).get(0).files[0]
    }

    $el.on('change', fileInputSelector, setFile)
}
这是jQuery事件委派。这里,监听器被附加到指令的根元素。当事件被触发时,它将冒泡到注册的元素,jQuery将确定事件是否起源于与定义的选择器匹配的内部元素。如果是,处理程序将启动

这种方法的好处是:

  • 处理程序绑定到$元素,当指令作用域被销毁时,该元素将被自动清除
  • 模板中没有代码
  • 即使在注册事件处理程序时尚未呈现目标委托(输入)(例如,在使用
    ng if
    ng开关
    时),也将工作

您只需在onchange中添加以下代码,它就会检测到更改。你可以拧
`onchange="angular.element(this).scope().UpLoadFile(this.files)"`
 var tmpl = '<input type="file" id="{{name}}-filein"' + 
             'onchange="angular.element(this).scope().UpLoadFile(this.files)"' +
             ' multiple accept="{{mime}}/*" style="display:none" placeholder="{{placeholder}}">'+
             ' <img id="{{name}}-img" src="{{icon}}" ng-click="clicked()">' +
             '';
   // Image was clicked let's simulate an input (file) click
   scope.inputElem = elem.find('input'); // find input in directive
   scope.clicked = function () {
         console.log ('Image clicked');
         scope.inputElem[0].click(); // Warning Angular TriggerEvent does not work!!!
    };
<!-- HTML -->
<button id="uploadFileButton" class="btn btn-info" ng-click="vm.upload()">    
<span  class="fa fa-paperclip"></span></button>
<input type="file" id="txtUploadFile" name="fileInput" style="display: none;" />
// self is the instance of $scope or this
self.upload = function () {
   var ctrl = angular.element("#txtUploadFile");
   ctrl.on('change', fileNameChanged);
   ctrl.click();
}

function fileNameChanged(e) {
    console.log(self.currentItem);
    alert("select file");
}
/**
 *File Input - custom call when the file has changed
 */
.directive('onFileChange', function() {
  return {
    restrict: 'A',
    link: function (scope, element, attrs) {
      var onChangeHandler = scope.$eval(attrs.onFileChange);

      element.bind('change', function() {
        scope.$apply(function() {
          var files = element[0].files;
          if (files) {
            onChangeHandler(files);
          }
        });
      });

    }
  };
});
<input type="file" ng-model="file" on-file-change="onFilesSelected">
$scope.onFilesSelected = function(files) {
     console.log("files - " + files);
};
$scope.$watch('change.fnEvidence', function() {
                    alert("has changed");
                });
<input type="file" files-input ng-model="fileList" 
       ng-change="onInputChange()" multiple />
link($scope, $el) {
    const fileInputSelector = '.my-file-input'

    function setFile() {
        // access file via $el.find(fileInputSelector).get(0).files[0]
    }

    $el.on('change', fileInputSelector, setFile)
}
document.getElementById(id).value = "";