使用$ eval将参数传递回函数

时间:2014-09-24 10:51:47

标签: javascript angularjs

我正在尝试使用角度引导程序组件,特别是选项卡组件。我的自定义指令目前看起来像这样:

        scope: {
            select: '&select'
          },
        template:   '<tabset>' +
                        '<tab ng-repeat="tab in menu.tabs" disabled="tab.disabled" active="tab.active" select="tabSelected($index)">' +
                            '<tab-heading>' +
                                '<i class={{tab.headingClass}}></i> {{tab.title}}' +
                            '</tab-heading>' +
                            '<div ng-include="tab.partial"></div>' +
                        '</tab>' +
                    '</tabset>',

        controller: 'TabBarController',

在上面我可以使用$index服务检索当前标签索引,这很好用。在选项卡控制器中,我可以通过以下功能访问它:

$scope.tabSelected = function (tabIndex) { .. };

我的html(removal.html)使用该指令及其select属性从其自己的控制器(removed-controller.js)传递一个函数,用于上述函数,以便使用:

 $scope.tabSelected = function (tabIndex) {
    if ($scope.select){
        $scope.$eval( $scope.select({index : tabIndex}) );
    }
};

因此,如果选择收到一个函数,它会检查它并假设传回选项卡索引 - 问题是我总是回来未定义。下面是我正在建立链接的html和需要tab-index的删除控制器:

<div tab-bar file-url="..."
        select="removalModel.onSelected()"
></div>

$scope.removalModel.onSelected = function(tabIndex){
   cvsBoxService.resetScrollToTop('planoRemovalContainer');
   // Always gets back undefined
   console.log( "Tab index:"+tabIndex );
};

我希望这很明确....无论如何你打包一个参数,通过$ eval发送它并在另一边使用它?

由于

注意:我也尝试过:

$scope.$eval($scope.select(), {index : tabIndex});

1 个答案:

答案 0 :(得分:0)

select来电removalModel.onSelected()。您不会将任何参数传递给onSelected,因此tabIndex始终为undefined

您需要removalModel.onSelected(index)之类的内容。

我不知道您使用$scope.$eval的原因。