2015-09-05 60 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>