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

前端 未结 6 1815
日久生厌
日久生厌 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:40

    To build on Sir l33tname's answer:

    In services declaration:

        angular.module('app.services', []).
          service('tweetWidgets', function() {
    
            this.loadAllWidgets = function() {
    
                /* widgets loader code you get when 
                 * declaring you widget with Twitter 
                 * this code is the same for all widgets 
                 * so calling it once will reference whatever
                 * widgets are active in the current ng-view */
    
                !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");
             };
    
             this.destroyAllWidgets = function() {
                var $ = function (id) { return document.getElementById(id); };
                var twitter = $('twitter-wjs');
                if (twitter != null)
                    twitter.remove();
             };  
          });
    

    Then in controller declarations:

        angular.module('app.controllers', []).
          controller('view_1_Controller', tweetWidgets) {
    
             // load them all
             tweetWidgets.loadAllWidgets();
    
         }).
    
           controller('view_2_Controller', tweetWidgets) {
    
              // now destroy them :>
              tweetWidgets.destroyAllWidgets();
    
         });
    

    Now whenever you leave view #1 to go to view #2, your controller for view #2 will remove the widgets associated with view #1 and when you return to view #1 the widgets will be re-instatiated.

提交回复
热议问题