谁在调用该函数?

时间:2016-12-19 10:32:26

标签: javascript angularjs angular-material

在我的应用程序中发生了一些奇怪的事情。

我的控制器有两个功能,一个用于添加标签,另一个用于删除标签。

以下是代码:

$scope.createTab = function(){
         $scope.addTab("New Tab",50,0);
         console.log($scope.mbpTabs.length);
    }

$scope.deleteTab= function (index){
        $scope.mbpTabs.splice(index,1);
    }

我省略了addTab的代码,因为我认为我的问题不需要它。

这是我的标签结构:

   <md-tabs class="stretch-height" flex md-selected="mbpSelectedIndex" md-border-bottom md-autoselect md-dynamic-height> 
    <md-tab ng-repeat="tab in mbpTabs" md-on-select="onTabSelected(tab)">
        <md-menu context-menu>
            <div flex class="mbpTable" ng-right-click="$mdOpenContextMenu($event)">{{tab.title}}</div>
            <md-menu-content>
                <md-menu-item >
                    <md-button  ng-click="deleteTab($index)" ng-disabled="mbpTabs.lenght<=1">
                       Delete
                    </md-button>
              </md-menu-item>

            </md-menu-content>
        </md-menu>  
        <md-tab-body>
                ...
        </md-tab-body> 
    </md-tab>
    <md-tab md-on-select="createTab()">
            <md-tab-label>
                <div class="mbpTable" >+</div>
            </md-tab>               
 </md-tabs>

当我从上下文菜单中选择删除选项后,删除了一些触发器createTab功能(如浏览器调试器中所示)。我该怎么知道它是什么?我在代码中找不到任何东西(我试图在整个项目中对createTab命令进行大量研究,但我无法弄清楚。)

由于

修改

根据下面的建议,这里是createTab的调用堆栈:

calling stack

好像不是我的错

编辑2:

仅在已创建新标签时才会发生。

编辑3:

仅在某些条件下才有效:

1)删除新选项卡只有在之前选择了选项卡且此时未选中时才能正常工作(它不会创建新选项卡)。

2)删除在页面加载时创建的选项卡仅在没有创建新选项卡时才有效。

我仍然无法解释。

2 个答案:

答案 0 :(得分:1)

此处md-on-select="createTab()",删除旧标签后,此标签会被选中。您可以尝试将此绑定到另一个事件。

答案 1 :(得分:1)

我不确定这是否是问题,因为我需要检查渲染的DOM,但是你有未关闭的标记<md-tab-label>,它可以导致块重叠,并且可以在点击deleteTab块时触发这两个函数。