AngularJS在statechange之后重新初始化JS

时间:2013-08-11 18:27:38

标签: javascript dom angularjs

我有来自http://sharethis.com的社交按钮,我希望将其放在我的应用上的个人资料页面上。我正在使用ui-router进行状态管理和页面转换等。

我把我从sharethis获得的代码放到我的index.html:

<script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script>
<script type="text/javascript">stLight.options({publisher: "66053d76-64c6-4378-8971-aac043dbbc5d", doNotHash: false, doNotCopy: false, hashAddressBar: false});</script>

以及我的个人资料页面上的标记:

<span class='st_twitter_hcount' displayText='Tweet'></span>
<span class='st_facebook_hcount' displayText='Facebook'></span>
<span class='st_googleplus_hcount' displayText='Google +'></span>

正在发生的事情是社交按钮仅在您在个人资料页面上刷新时加载(我猜这是预期的行为)。如果应用程序引导来自主页,然后您转换到配置文件页面,则它们不会被加载。

我是否可以使用任何技巧重新初始化或重新加载这些javascript文件?

4 个答案:

答案 0 :(得分:8)

我花了一些时间调查这个源代码并发现这个创建按钮的功能,在页面控制器上添加这个函数调用,这将添加按钮。

stButtons.makeButtons();

答案 1 :(得分:1)

虽然这可能不是根据文档或最佳实践的最佳方式,但这是我的解决方案。我有一个特殊的视图,我想要加载一组新的ShareThis按钮。所以我创建了一个再次初始化按钮的功能。

这是我在控制器中放置的功能:

  $scope.loadShareThis = function() {
    stButtons.makeButtons();
  }

然后我在我的html中使用ng-init启动函数:

<div ng-init="loadShareThis()">
   <share-buttons></sharebuttons>
</div>

答案 2 :(得分:0)

这可能不是答案,因为你想使用shareThis,但我决定使用addthis,因为我没有找到一种方法来使shareThis工作与angular。

Addthis支持异步加载和动态呈现。

您可以按照此处的说明进行操作:http://support.addthis.com/customer/portal/articles/1293805-using-addthis-asynchronously

然后你可能想把它变成一个角度指令,如下所述:http://www.laurentiu-ciovica.com/2013/07/angularjs-addthis-directive.html

答案 3 :(得分:0)

AlexG和Jeff Callahan的回答给了我指示,但它仍然不适合我。我不得不换行

stButtons.makeButtons()
<$>在$ timeout中,现在可以正常工作。

在HTML中我有(JADE语法)

my-directive(ng-repeat="review in myReviews" ng-init="loadShareThis()")

在我的控制器中我有

  $scope.loadShareThis = function() {
    $timeout(function(){
      stButtons.makeButtons();
    });
  };

必须使用Angular摘要周期做一些事情。