1

コントローラーに次のウォッチャーを設定しました。

var embeds = {twitter: false, facebook: false};

$scope.$watch(embeds, function(newVal, oldVal) {
    if(embeds.twitter && embeds.facebook) $scope.loading = appLoader.off();
});

これは、embeds変更時に起動する必要があります。すべての埋め込みツイートと Facebook 投稿がページに読み込まれたかどうかを確認する次の関数があります。すべてのツイートまたは Facebook の投稿が読み込まれると、ダイジェスト サイクルをトリガーするためにブロックembeds内で更新されます。$timeout

checkFBInit();

twttr.ready(function(twttr) {
    twttr.events.bind('loaded', function(event) {
        $timeout(function() {
            embeds.twitter = true;
        });
    });
});

function checkFBInit() {
    // Ensure FB.init has been called before attempting to subscribe to event
    var fbTrys = 0;
    function init() {
        fbTrys++;
        if (fbTrys >= 60) {
            return;
        } else if (typeof(FB) !== 'undefined') {
            fbTrys = 60;
            FB.Event.subscribe('xfbml.render', function() {
                $timeout(function() {
                    embeds.facebook = true;
                });
            });
            return;
        } else {
            init();
        };
    };
    init();
};

私が抱えている問題は、ウォッチャーを設定したときに一度だけ起動することです。バインドおよび/または監視embedsを試みましたが、ウォッチャーは一度しか起動しません。$scopeembeds.twitterembeds.facebook

4

1 に答える 1

5

使用する:

$scope.embeds = {twitter: false, facebook: false};
$scope.$watch('embeds', function(newVal, oldVal) {
    if ($scope.embeds.twitter && $scope.embeds.facebook) {
        $scope.loading = appLoader.off();
    }
}, true);

https://docs.angularjs.org/api/ng/type/$rootScope.Scopeを参照してください。最初の引数は、param の名前を返すstringorでなければなりません。function

于 2016-03-05T18:48:21.907 に答える