在大多数小提琴中包含ng-file-upload(https://github.com/danialfarid/ng-file-
upload
)的示例用法代码,例如(http://jsfiddle.net/danialfarid/maqbzv15/1118)
/
),上传响应回调函数会将其代码包装在$timeout
服务调用中,但是这些调用没有传入任何延迟参数。
$timeout
(https://docs.angularjs.org/api/ng/service/
$
timeout)的Angular.js文档指示延迟是可选的,但是为什么要拨打电话,$timeout
如果不延迟代码,跑。换句话说,为什么不执行以下操作:
//inject angular file upload directives and services.
var app = angular.module('fileUpload', ['ngFileUpload']);
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
$scope.uploadPic = function(file) {
file.upload = Upload.upload({
url: 'https://angular-file-upload-cors-srv.appspot.com/upload',
data: {username: $scope.username, file: file},
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
});
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function (evt) {
// Math.min is to fix IE which reports 200% sometimes
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
}]);
$timeout
在所有这些示例中,有没有理由使用包装器?以下file.upload调用可以代替它吗?:
file.upload.then(function (response) {
file.result = response.data;
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function (evt) {
// Math.min is to fix IE which reports 200% sometimes
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
编辑:我可以看到它似乎没有$timeout
包装程序就可以运行,但是所有示例中都包含了它,这使我认为它是有意的,这可能意味着存在安全性/健壮性/浏览器兼容性方面的问题,我在这里不了解。
这与Angular的摘要周期有关。在继续解释摘要周期是什么之前,我将尝试通过一个示例进行演示。想象以下代码:
angular.module('app', []).controller('TestController', ['$scope', function($scope){
$scope.name = 'Tom';
setTimeout(function(){
$scope.name = 'Bob';
}, 2000);
}]);
此代码存在一个固有的问题。尽管我们$scope.name
在2秒后更改了变量,但Angular完全不知道将更改为$scope.name
。如果现在考虑下面的示例$timeout
代替我们使用:
angular.module('app', []).controller('TestController', ['$scope', '$timeout', function($scope, $timeout){
$scope.name = 'Tom';
$timeout(function(){
$scope.name = 'Bob';
}, 2000);
}]);
Angular将在两秒钟后调用匿名函数,但是,它将从Angular的摘要周期开始。这是$timeout
和之间的主要区别setTimeout
,正在运行摘要循环。
摘要周期是(简单地)将Angular遍历所有观察者(绑定),检查是否有任何更改并在适当的地方重新呈现。您可能已经在$scope.$apply
其他地方看到过提及-
这是开始摘要循环的方法。
关于您提供的示例:如果$timeout
未使用,Angular不会知道已进行任何更改,因此,您的视图将不会更新。我$scope.$apply
之前提到过,所以您可能想知道为什么我们不只是使用它呢?使用的问题$scope.$apply
是您不能确定摘要循环尚未进行。如果您确实在通话时调用它,则会看到错误“
$digest is already in progress
”。$timeout
仅在当前周期之后运行,因此不会发生此错误。
人们经常毫不犹豫地使用$timeout
Angular通知第三方(例如您的文件上传器)已进行了更改,否则该更改将不会发生。
希望这可以清除一切。
汤姆
在vertx web backpressure示例中,假设我作为标准verticle启动服务器verticle,那么observeOn(RxHelper.scheduler(vertx.getDelegate())会做什么。 我在一台8核机器上部署了8个事件循环线程和8个Server verticle实例,我没有在路由的处理程序中阻止IO调用
问题内容: 当调用这样的函数时: HTML: JS: 一切正常,但是当我的功能在服务中(控制器可以访问)时,不会调用该功能。通过将服务名称作为前缀来调用它也不是一个选择(即使这在javascript代码本身中也有效) 所以我的问题是:当位于服务中的ng-change中调用服务时,正确的方法是什么? 提前致谢 问题答案: 您需要使用通过作用域的函数来调用服务函数。因此,在您的示例中,只要将服务注入到
本文向大家介绍angular2 ng2-file-upload上传示例代码,包括了angular2 ng2-file-upload上传示例代码的使用技巧和注意事项,需要的朋友参考一下 Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploader。ng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-uplo
ng-file-upload由轻量级AngularJS文件上传指令构成。 特征 文件上传/取消程序 文件拖放(仅html5) 剪贴板中的图片复制和浏览器界面的拖放(仅html5) 用户通过使用ngImgCrop进行图片尺寸改变和中间裁剪(本地)(仅html5) 定向修复有关Exif定向数据的JPEG图像文件 断点上传:暂停/继续上传(仅html5) 本地验证支持:文件类型/大小,图像宽度/盖度/透
我使用以下代码执行HTTP POST请求并反序列化返回的值: 为了让它更容易使用,我尝试将代码封装在一个函数中,如下所示: 然而,当代码被放入函数中时,它就会停止工作。它抛出。似乎有些类型信息在途中丢失了。 null
问题内容: 我已经工作了几个小时,以使我的链接可以通过AngularJS应用点击进入不同的视图。 但是,我似乎只能在Plunker上在线使用该功能。 我一直在尝试在本地计算机上测试点击功能,并且ng-view似乎未加载。当我下载我知道正确的Plunker代码时,因为它可以在Plunker上运行,所以ng- view在本地托管后似乎停止工作。 我对ng-include和我定义为自己的HTML标签的指