2

我有来自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

4 回答 4

8

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

stButtons.makeButtons();
于 2014-02-11T10:16:05.213 回答
1

虽然根据文档或最佳实践,这可能不是最好的方法,但这是我的解决方案。我有一个特定的视图,我希望在其中加载一组新的 ShareThis 按钮。所以我创建了一个再次初始化按钮的函数。

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

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

然后我在我的 html 中使用 ng-init 初始化函数:

<div ng-init="loadShareThis()">
   <share-buttons></sharebuttons>
</div>
于 2015-04-20T06:00:23.140 回答
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

于 2014-01-05T16:00:07.823 回答
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 摘要循环做一些事情。

于 2015-05-24T15:21:49.387 回答