2015-09-05 69 views
1

我有一个指令,是需要驻留在其上的变量是父控制器混合隔离范围和controllerAs语法

<hack-chart-controls counttime="vm.countInMinutes"></hack-chart-controls> 

指令:

function hackChartControls($log, $parse) { 
    var directive = { 
     restriction: 'AE', 
     scope: { 
      counttime: '=' 
     }, 
     templateUrl: '/app/components/hackChartControls.html', 
     link: link 
    }; 

    return directive; 

基于this answer我能当观看该指令中的变量发生变化。

但是,在指令标记中,因为我使用ControllerAs语法,所以我使用vm作为我的范围变量。例如:

<div class="close"><i class="fa fa-close" ng-click="vm.close()"></i></div> 

之前作出scope: { counttime: '=' }变化,因为它继承了父范围而无需分离的范围,这些ng-click功能的工作就好了。

我怎样才能让click函数重新工作?

+0

这是哪里'NG-click'?这是“hackChartControls.html”模板的一部分吗?然后,在指令的隔离范围内没有定义'vm'。相反,只要执行'ng-click =“close()”' –

回答

1

我会参考孤立范围内的动作,或根本不使用孤立范围。这取决于你为什么要首先使用隔离范围。隔离范围的目的是封装指令并使其独立于外部范围。

function hackChartControls($log, $parse) { 
    var directive = { 
     restriction: 'AE', 
     scope: { 
      counttime: '=', 
      action: '&', 
     }, 
     templateUrl: '/app/components/hackChartControls.html', 
     link: link 
    }; 

    return directive; 
} 

而且你的模板:

<div class="close"><i class="fa fa-close" ng-click="action()"></i></div> 

使用方法如下:

<hack-chart-controls counttime="vm.countInMinutes" action="vm.close()"></hack-chart-controls>