[Angularjs]angular ng-repeat與js特效加載前後致使的問題

寫在前面

最近在項目中遇到這樣的一個前端的bug,在ng-repeat中綁定的圖片,有一個晃動的特效,在手機端瀏覽的時候,圖片有時候會正常展現,有時就展現不出來。當時猜想是由於angularjs與特效的那些代碼加載的前後順序形成的。有了這樣的猜想,就有查找解決方案的方向了。css

系列文章

[Angularjs]ng-select和ng-optionshtml

[Angularjs]ng-show和ng-hide前端

[Angularjs]視圖和路由(一)android

[Angularjs]視圖和路由(二)angularjs

[Angularjs]視圖和路由(三)app

[Angularjs]視圖和路由(四)ide

[Angularjs]ng-class,ng-class-even,ng-class-oddpost

[Angularjs]單頁應用之分頁測試

[Angularjs]國際化url

[Angularjs]ng-repeat中使用ng-model遇到的問題

[Angularjs]過濾器

[Angularjs]ng-file-upload上傳文件

解決方案

自定義一個指令,在加載完成angular repeat時,而後再去綁定那些特效。具體以下所示:

var app = angular.module('mylibraryapp', ['ngRoute', 'pascalprecht.translate', 'ngFileUpload']);

//指令
app.directive('onFinishRenderFilters', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            if (scope.$last === true) {
                $timeout(function () {
                    scope.$emit('ngRepeatFinished');
                });
            }
        }
    }
});

在使用ng-repeat的標籤上面添加這樣的代碼

<div class="item" id="filediv" ng-repeat="file in files" on-finish-render-filters>
           ........
</div>

在對應的Controller裏面,添加angular repeat執行完成的回調方法

    //加載完成
    $scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
        new WOW().init();
        var h = $(window).height();
        $(".modal-dialog").css("margin-top", (h / 2) - 100 + "px");
    });

總結

這個問題折騰了很長時間,在電腦上測試測試不出來,在部分低版本的android手機上面有這樣的問題。

相關文章
相關標籤/搜索