我有一个使用 angularJs 引导指令制作的简单标签 UI。
我需要计算页面上有多少 div 有一些 id。问题是在每个选项卡单击时角度评估函数。这是正常的吗?如何使函数仅在第一次被调用?
PLUNKR:http ://plnkr.co/edit/HIRzYOVX8huEDL2snqJM?p=preview
$scope.test = function(){
$scope.myId = window.document.getElementById("ciccio")
}
我有一个使用 angularJs 引导指令制作的简单标签 UI。
我需要计算页面上有多少 div 有一些 id。问题是在每个选项卡单击时角度评估函数。这是正常的吗?如何使函数仅在第一次被调用?
PLUNKR:http ://plnkr.co/edit/HIRzYOVX8huEDL2snqJM?p=preview
$scope.test = function(){
$scope.myId = window.document.getElementById("ciccio")
}
您第一次尝试的问题是该函数被放置在 Angular 的视图数据绑定 {{}} 中,因此每当发生变化时都会调用它。视图中的函数只能放在 ng-init、ng-show 等指令中。
大多数情况下,如果您希望一个函数只运行一次,您可以从 ng-init 指令调用 if,该指令在 angular 被引导后运行。但是,由于此函数处理页面上的元素,因此您必须确保所有内容都已呈现。您可以使用 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