指令为ShareThis呈现DOM后调用Javascript
在Angular(1.3)应用程序中,我使用ng repeat显示记录列表。ng repeat中有一个带有模板的指令。在模板中,我使用的控件是在加载DOM后激活的 在应用程序的初始加载时,ShareThis Javascript正常工作并激活按钮。在路线更改时,它不会激活。我找到了通过指令为ShareThis呈现DOM后调用Javascript,javascript,angularjs,dom,angularjs-directive,sharethis,Javascript,Angularjs,Dom,Angularjs Directive,Sharethis,在Angular(1.3)应用程序中,我使用ng repeat显示记录列表。ng repeat中有一个带有模板的指令。在模板中,我使用的控件是在加载DOM后激活的 在应用程序的初始加载时,ShareThis Javascript正常工作并激活按钮。在路线更改时,它不会激活。我找到了通过stButtons.makeButtons()或stButtons.locateElements()手动激活控件的引用,但我不确定在指令或页面循环中在何处调用此函数。我试过: 指令链接功能-使用$timeout或范
stButtons.makeButtons()
或stButtons.locateElements()手动激活控件的引用代码>,但我不确定在指令或页面循环中在何处调用此函数。我试过:
指令链接功能-使用$timeout
或范围。$watch
模板stButtons.locateElements()代码>-在模型绑定之前激活
绑定后的控制器-在呈现DOM之前激活
我的理解是,需要在绑定和DOM渲染之后调用激活的函数,但Angular不知道DOM何时准备就绪。有一种方法可以仅使用Javascript动态呈现ShareThis控件,但我希望在模板中定义HTML,而不是在本例中使用Javascript
我已经看到了一些相关的问题,但是没有一个答案对我的场景来说是100%有效的(在Angular 1.3中,很多问题都被打破了)
项目列表.html(视图)
项目指令.js(指令)
item.html(指令模板)
。。。
...
如果我理解得很好,您希望在dom完全呈现后调用该函数,对吗?在指令的postLink中尝试以下操作:
$scope.$watch('viewContentLoaded',stButtons.locateElements())
虽然我的解决方案有点粗糙,但我还是更喜欢它而不是使用$watch,因为这样效率很低。相反,我初始化了在呈现要加载按钮的特定视图时加载按钮的函数。技术如下:
以下是您应该放在控制器中的功能:
$scope.loadShareThis = function() {
stButtons.makeButtons();
}
然后,您可以将以下内容添加到item-list.html中:
<div ng-repeat="item in vm.itemList" ng-init="loadShareThis()">
<item-directive item="item"></item-directive>
</div>
动态URL可能会给您带来其他问题,但这是另一个问题。viewContentLoaded是指什么?每次加载ngView内容时,它都会执行一个函数。更多信息请点击此处:
(function () {
angular.module('app');
function itemDirective() {
var directive = { templateUrl: 'item.html', link: linkFunc, controller: ItemDirective };
return directive;
function linkFunc(scope, element, attr, ctrl) { var item = scope.item }
}
ItemDirective.$inject = ['$scope'];
function ItemDirective($scope) { ... }
}
...
<div class="item-share-section">
<span class='st_sharethis_large' st_url="{{vm.item.url}}" st_title="{{vm.item.name}}"></span>
</div>
...
$scope.loadShareThis = function() {
stButtons.makeButtons();
}
<div ng-repeat="item in vm.itemList" ng-init="loadShareThis()">
<item-directive item="item"></item-directive>
</div>