Why will my twitter widget not render if i change the view in angularjs?

前端 未结 6 1660
日久生厌
日久生厌 2021-01-01 22:46

Hi and thanks for reading.

I have a angular app im making and ive stumbled on a problem. set up as so

index.html-



        
6条回答
  •  别那么骄傲
    2021-01-01 23:29

    For those trying to load twttr.widgets.load() inside their controller, you will most likely get an error that twttr is not defined AT SOME POINT in your UX, because the async call to load the twitter script may not be completed by the time you controller instantiates and references twttr.

    So I created this TwitterService

    .factory('TwitterService', ['$timeout', function ($timeout) {
        return {
            load: function () {
            if (typeof twttr === 'undefined') {
                (function() {
                    !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');
                })();
            } else {
                $timeout = twttr.widgets.load();
            };
            }
        }
    }])
    

    and then call TwitterService.load() inside the controllers that require your widgets. This worked pretty well. It basically just checks if the twttw object exists and if it does, just reload the script... otherwise just reload the script.

    Not sure if this is the best implementation, but it seems like all other solutions have edge cases where it will throw an error. I have yet to find one with this alternative.

提交回复
热议问题