如何判断在角度调用我的一个范围函数?

时间:2014-06-26 08:35:13

标签: angularjs

我的指令有一个模板,例如:

<div ng-show="isVisible()"> ... </div>

我已经更改了isVisible,所以它现在只返回true并执行console.log。

此指令在我的页面上包含一次,但日志发生了50次以上。我想知道什么代码调用isVisible很多次。有没有办法追踪调用函数的内容? ACTUAL堆栈跟踪完全没用,因为angular似乎隐藏了所有内容。 是否有一些工具可以找出非角度代码触发函数调用的内容。

在其他一些情况下,我有数据更改,我无法找到它正在改变的地方[它实际上不是我的代码],因为原始代码是有角度的,我不能只使用堆栈跟踪,或使用手表或做我正常的调试类型。

这是指令:

require('app').directive('kmFormLanguages', ["$q", function ($q) 
{
  return {
    restrict: 'EAC',
    template: '<span ng-show="isVisible()"><span km-select multiple ng-model="binding" binding-type="string" placeholder="Available Languages" items="locales|orderBy:\'name\'" minimum="1"></span></span>',
    transclude: true,
    scope: {
      binding : '=ngModel',
    },   
    controller: ["$scope", "IStorage", "editFormUtility", function ($scope, storage, editFormUtility) {

      $scope.locales = [
        {identifier:"ar", name:"Arabic"  },   
        {identifier:"en", name:"English" }, 
        {identifier:"es", name:"Spanish" }, 
        {identifier:"fr", name:"French"  },   
        {identifier:"ru", name:"Russian" }, 
        {identifier:"zh", name:"Chinese" }
      ];   

      $scope.isVisible = function() {
        console.log('binding: ', $scope.binding);
        debugger;
        return $scope.binding!==undefined && $scope.binding!==null;
      }    
    }]   
  };
}])

和使用它的html(没有显示祖先的角度控件):

<div ng-controller="editMeasure">
    [...]
    <div ng-show="!isLoading() && status!='hidden'">
        [...]
        <span km-form-languages ng-model="document.header.languages"></span>

1 个答案:

答案 0 :(得分:1)

很难仅从文字中说出来。如果您可以发布示例代码,则可以给出更准确的答案。

但是根据你所描述的,似乎你的函数被调用为angular js

的一部分
$digest or $compile

周期。