AngularJs多次阻止评估函数

时间:2013-09-23 17:51:04

标签: angularjs

我有一个使用angularJs bootstrap指令制作的简单选项卡UI。

我需要计算页面上有多少div有一些id。问题是角度评估每个标签点击时的功能。这是正常的吗?如何才能首次调用函数?

PLUNKR:http://plnkr.co/edit/HIRzYOVX8huEDL2snqJM?p=preview

$scope.test = function(){
    $scope.myId = window.document.getElementById("ciccio")
}

1 个答案:

答案 0 :(得分:3)

您第一次尝试的问题是该函数被放置在angular的视图数据绑定{{}}内,因此无论何时更改都会调用它。在视图中,函数只应放在ng-init,ng-show等指令中

大多数情况下,如果你想要一个函数只能运行一次,那么从ng-init指令调用一次,这个指令在自动引导角度后运行。但是,由于此函数处理页面上的元素,因此必须确保呈现所有内容。你可以使用angular.element(document).ready,类似于jQuery的ready函数:

angular.element(document).ready(function () {
    var scope = angular.element(window.document.getElementById("tabsContainer")).scope();
    scope.getDivs();
});

第二行获取包含div的控制器的正确$ scope(我添加了#tabsContainer id:

<div id="tabsContainer" ng-controller="TabsDemoCtrl">

  <tabset vertical="true" type="navType"> 
    <tab heading="Vertical 1"><div id="ciccio">Content 1</div></tab>
    <tab heading="Vertical 2">Vertical content 2</tab>
  </tabset>

</div>

此处更新了plunker http://plnkr.co/edit/xkzcJfMFnmdfCQtOWEY0