javascript - AngularJS 变量不会立即反射(reflect)在 View 上,而是更新在 Controller 上

标签 javascript angularjs

我想做的是从 Controller 函数更新 AngularJS 变量,当我控制台它立即更新时,但当我在 View 上打印它时,它会在大约 5-8 秒后更新。

我尝试使用 ng-model 和花括号,但在这两种情况下,它都会在几秒钟后显示,但在控制台中会立即更新。

我在 uploader 回调中调用 uploadedMedia 函数,并且它在 console.log 中工作正常

$scope.UploadedMedia = function(){
      console.log($scope.Album[0].Media.length);
      $scope.UploadedMediaVal = $scope.Album[0].Media.length;
      console.log($scope.Album[0].Media.length);
    }

$scope.initFineUploader = function(){
  var fcnt = 0;
  var iuploader = new qq.FineUploaderBasic({
        multiple: true,
        autoUpload: true,
        title: "Attach Photos",
        button: $("li[data-type='uploadMediabutton']")[0],
        request: {
            endpoint: site_url + "api/uploadimage",
            customHeaders: {
                "Accept-Language": accept_language
            },
            params: {
                Type: 'ratings',
                unique_id: function() {
                    return '';
                },
                LoginSessionKey:LoginSessionKey,
                DeviceType:'Native'
            }
        },
        maxConnections : 50,
        validation: {
            acceptFiles: '.bmp,.jpeg,.jpg,.gif,.png',
            allowedExtensions: ['bmp','jpeg', 'jpg', 'gif', 'png', 'JPEG', 'JPG', 'GIF', 'PNG'],
            sizeLimit: 4194304 // 40mb
        },
        callbacks: {
            onUpload: function(id, fileName) {
                $scope.Album[0].Media.push({MediaGUID:'',ImageName:'',Caption:'',MediaType:'Image',VideoLength:'',ConversionStatus:'',IsLoader:'1',FileName:fileName});
                $scope.UploadedMedia();
                $('.rating-submit').attr('disabled','disabled');
                fcnt++;
            },
            onProgress: function(id, fileName, loaded, total) {
                $scope.Uploading = 1;
            },
            onComplete: function(id, fileName, responseJSON) {
                fcnt--;
                if (responseJSON.Message == 'Success') {
                  $($scope.Album[0].Media).each(function(mk,mv){
                    if(mv.FileName == fileName){
                      $scope.Album[0].Media[mk]['MediaGUID'] = responseJSON.Data.MediaGUID;
                      $scope.Album[0].Media[mk]['ImageName'] = responseJSON.Data.ImageName;
                      $scope.Album[0].Media[mk]['IsLoader'] = 0;

                    }
                  });
                  var fNameExt = fileName.substr(fileName.lastIndexOf('.') + 1);
                  $('li[data-filename="'+fileName+'"]').remove();
                  setTimeout(function(){
                      $('li[data-filename="'+fileName+'"] .m-laoder').remove();
                  },1000);
                } else {
                    $('li[data-filename="'+fileName+'"]').remove();
                }
                if(fcnt <= 0){
                    $scope.Uploading = 0;
                    $('.rating-submit').removeAttr('disabled');
                    $('.attached-media-list li.media-loader').remove();
                }
                $scope.UploadedMedia();
            },

            onValidate: function(b) {
                if($scope.Album[0].Media.length>=10){
                  showResponseMessage('You can upload maximum 10 images, please delete any old image to upload new one.','alert-danger');
                  return false;
                }
                var validExtensions = ['bmp','jpeg', 'jpg', 'gif', 'png', 'JPEG', 'JPG', 'GIF', 'PNG']; //array of valid extensions
                var fileName = b.name;
                var fileNameExt = fileName.substr(fileName.lastIndexOf('.') + 1);
                if ($.inArray(fileNameExt, validExtensions) == -1) {
                    showResponseMessage('Allowed file types only bmp, jpeg, jpg, gif and png.','alert-danger');
                    return false;
                }
                if (b.size > 4194304) {
                    showResponseMessage('Image file should be less than 4 MB','alert-danger');                   
                }
            },

            onError: function(){
                $('.attached-media-list li.media-loader:last-of-type').remove();
            }
        }
    });

}

<div>
{{UploadedMediaVal}}
<span ng-bind="UploadedMediaVal"></span>
</div>

最佳答案

修改变量后写入$scope.$apply();

关于javascript - AngularJS 变量不会立即反射(reflect)在 View 上,而是更新在 Controller 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816468/

相关文章:

javascript - 如何在数组中向网络工作人员创建/发布消息

javascript - 如何检查一个对象是否包含另一个对象?

javascript - 我可以使用 JavaScript 与其他计算机建立连接吗?

angularjs - 如何更新 Ionic Framework 中 Angular 的版本?

javascript - 如何将单选按钮选择(每个都有一个字符串值)保存到特定 Mongoose 模型中的字符串数组?

javascript - 动画结束后如何删除类(class)?

javascript - 使用标准 JS Promise 和 jQuery addClass 调用

javascript - 如何在页面加载后立即激活 ResponsiveVoice?

css - 有没有办法检查 Protractor 中继承的 CSS 属性?

javascript - AngularJS $filter ('orderBy' ) 奇怪的排序