Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指令为ShareThis呈现DOM后调用Javascript_Javascript_Angularjs_Dom_Angularjs Directive_Sharethis - Fatal编程技术网

指令为ShareThis呈现DOM后调用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或范

在Angular(1.3)应用程序中,我使用ng repeat显示记录列表。ng repeat中有一个带有模板的指令。在模板中,我使用的控件是在加载DOM后激活的

在应用程序的初始加载时,ShareThis Javascript正常工作并激活按钮。在路线更改时,它不会激活。我找到了通过
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>