Soy nuevo en angular. Estoy tratando de leer la ruta del archivo cargado desde el campo 'archivo' HTML cada vez que ocurre un 'cambio' en este campo. Si uso 'onChange' funciona, pero cuando lo uso de forma angular usando 'ng-change' no funciona.
<script>
var DemoModule = angular.module("Demo",[]);
DemoModule .controller("form-cntlr",function($scope){
$scope.selectFile = function()
{
$("#file").click();
}
$scope.fileNameChaged = function()
{
alert("select file");
}
});
</script>
<div ng-controller="form-cntlr">
<form>
<button ng-click="selectFile()">Upload Your File</button>
<input type="file" style="display:none"
id="file" name='file' ng-Change="fileNameChaged()"/>
</form>
</div>
fileNameChaged () nunca llama. Firebug tampoco muestra ningún error.
Respuestas:
No hay soporte vinculante para el control de carga de archivos
https://github.com/angular/angular.js/issues/1375
en vez de
puedes intentar
y en su función cambia en lugar de
puedes intentar
A continuación se muestra un ejemplo práctico de carga de archivos con la carga de archivos de arrastrar y soltar. Http://jsfiddle.net/danielzen/utp7j/
Información de carga de archivos angular
URL para la carga de archivos AngularJS en ASP.Net
http://cgeers.com/2013/05/03/angularjs-file-upload/
Subida de archivos múltiples nativos de AngularJs con progreso con NodeJS
http://jasonturim.wordpress.com/2013/09/12/angularjs-native-multi-file-upload-with-progress/
ngUpload: un servicio de AngularJS para cargar archivos usando iframe
http://ngmodules.org/modules/ngUpload
fuente
sqren
la solución ... ... ... @ 0MV1Hice una pequeña directiva para escuchar los cambios de entrada de archivos.
Ver JSFiddle
view.html:
controller.js:
directive.js:
fuente
Este es un refinamiento de algunos de los otros, los datos terminarán en un modelo ng, que normalmente es lo que desea.
Marcado (solo cree un archivo de datos de atributos para que la directiva pueda encontrarlo)
JS
fuente
$scope.$apply();
requiere? Ming-change
evento todavía parece dispararse sin él.La manera limpia es escribir su propia directiva para enlazar al evento "change". Solo para hacerle saber que IE9 no es compatible con FormData, por lo que realmente no puede obtener el objeto de archivo del evento de cambio.
Puede usar la biblioteca ng-file-upload que ya es compatible con IE con FileAPI polyfill y simplificar la publicación del archivo en el servidor. Utiliza una directiva para lograr esto.
JS:
fuente
He ampliado la idea de @Stuart Axon de agregar un enlace bidireccional para la entrada del archivo (es decir, permitir restablecer la entrada restableciendo el valor del modelo a nulo):
Manifestación
fuente
data-ng-click="vm.theFile=''"
funciona bien, no es necesario escribirlo en un método de controladorSimilar a algunas de las otras buenas respuestas aquí, escribí una directiva para resolver este problema, pero esta implementación refleja más de cerca la forma angular de adjuntar eventos.
Puede usar la directiva de esta manera:
HTML
Como puede ver, puede inyectar los archivos seleccionados en su controlador de eventos, como inyectaría un objeto $ event en cualquier controlador de eventos ng.
Javascript
fuente
fileChange
expresión? Estoy usando esta directiva dentro de anng-repeat
y la$scope
variable pasada aattrHandler
es la misma para cada registro. ¿Cuál es la mejor solución?Esta directiva también pasa los archivos seleccionados:
El HTML, cómo usarlo:
En mi controlador:
fuente
Recomiendo crear una directiva
Esta directiva se puede usar muchas veces, usa su propio alcance y no depende del alcance principal. También puede dar algunos parámetros a la función del controlador. La función del controlador se llamará con el objeto de alcance, que estaba activo cuando cambió la entrada. $ apply actualiza su modelo cada vez que se llama al evento de cambio
fuente
La versión angular más simple de jqLite.
JS:
HTML:
fuente
Demostración de trabajo de la directiva de "entrada de archivos" que funciona con
ng-change
1Para hacer que un
<input type=file>
elemento funcione con la directiva ng-change , necesita una directiva personalizada que funcione con la directiva ng-model .La DEMO
fuente
Solución demasiado completa basada en:
Una manera simple de ocultar el campo de entrada y reemplazarlo con una imagen, aquí después de una solución, que también requiere un corte angular pero que hace el trabajo [TriggerEvent no funciona como se esperaba]
La solución:
Cuando se hace clic en la imagen, simule una acción DOM 'clic' en el campo de entrada. Et voilà!
fuente
Lo he hecho así;
fuente
Otra forma interesante de escuchar los cambios de entrada del archivo es vigilando el atributo ng-model del archivo de entrada. Por supuesto, FileModel es una directiva personalizada.
Me gusta esto:
HTML ->
<input type="file" file-model="change.fnEvidence">
Código JS ->
Espero que pueda ayudar a alguien.
fuente
Los elementos angulares (como el elemento raíz de una directiva) son objetos jQuery [Lite]. Esto significa que podemos registrar el escucha de eventos de esta manera:
Esta es la delegación de eventos jQuery. Aquí, el oyente está conectado al elemento raíz de la directiva. Cuando se activa el evento, se elevará al elemento registrado y jQuery determinará si el evento se originó en un elemento interno que coincida con el selector definido. Si lo hace, el controlador disparará.
Los beneficios de este método son:
ng-if
ong-switch
)http://api.jquery.com/on/
fuente
Simplemente puede agregar el siguiente código en onchange y detectará el cambio. puede escribir una función con X clic o algo para eliminar los datos del archivo.
fuente