簡體   English   中英

AngularJS變量不會立即反映在View上,但會在Controller上更新

[英]AngularJS variable is not reflecting instantly on View but Updated on Controller

我想做的是從控制器功能更新AngularJS變量,當我立即控制台它的更新時,但是當我在View上打印它時,大約5-8秒后就會更新。

我嘗試同時使用ng-model和花括號,但在兩種情況下都可以在查看幾秒鍾后在控制台中立即更新。

我在上載器回調中調用了上載媒體函數,並與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(); ,修改變量后。

您如何調用SomeOtherFunction 它是在角度摘要階段觸發還是由dom事件觸發。 在第二種情況下,您必須使用$scope. $apply (){}包裝命令$scope. $apply (){} $scope. $apply (){}

這是示例代碼示例,可以幫助您http://dojo.telerik.com/UmIvO。但我認為可以與您分享相冊陣列進行測試嗎?我已經測試過,它會立即做出響應,請檢查您的相冊陣列。 這樣可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM