2015-10-19 40 views
0

我有一個指令和模板:移動上點擊指令到自定義指令

sortable_column_header.js.coffee:

sortableColumnHeader = -> 
    return { 
    restrict: 'A' 
    replace: true 
    scope: 
     sortReverse: '=sortreverse' 
     tfield: '@' 

    templateUrl: 'angular/templates/sortable_column_header.html' 
    } 

angular 
    .module 'dashboard' 
    .directive 'sortableColumnHeader', [ 
    sortableColumnHeader 
    ] 

模板/ sortable_column_header.html.haml

%th.order-column 
    {{tfield}} 
    %span.order-arrow 
    %span.glyphicon.glyphicon-chevron-up{ng: {show: '{{sortReverse}}'}} 
    %span.glyphicon.glyphicon-chevron-down{ng: {show: '{{!sortReverse}}'}} 

剝離控制器:

DashboardController =() -> 
    vm = @ 
    vm.sortType = 'name' 
    vm.sortReverse = false 
    return 

angular 
    .module 'dashboard' 
    .controller 'DashboardController', [ 
    DashboardController 
    ] 

我在此自定義指令中附加了ng-click指令。目前,我正在做這樣的:

%th{sortable_column_header: true, ng: {click: 'vm.sortType = "name"; vm.sortReverse = !vm.sortReverse'}, tfield: 'Campaign Name', sortReverse: 'vm.sortReverse'} 

這是一個代碼veeeerrrryyyyyy長線,絕對可以被重構是指令的一部分。我該如何移動:

ng: {click: 'vm.sortType = "name"; vm.sortReverse = !vm.sortReverse'} 

裏面的指令是什麼?所以我可以例如綁定一個來自外部範圍的sortType,因爲這是唯一改變的東西?它必須與鏈接方法有關,但我無法弄清楚如何做到這一點,現在對我來說就是結束了。

回答

1

你在找什麼是這樣的:

sortableColumnHeader = -> 
    return { 
    restrict: 'A' 
    replace: true 
    scope: 
     sortReverse: '=sortreverse' 
     tfield: '@' 
    link: (scope, element, attrs)-> 
     element.bind 'click', -> 
     // Your code here 

    templateUrl: 'angular/templates/sortable_column_header.html' 
    } 

angular 
    .module 'dashboard' 
    .directive 'sortableColumnHeader', [ 
    sortableColumnHeader 
    ] 
+0

,我需要.find(次)?元素是th,當它被替換時,所有的屬性都應該移動過來?或不... – Kocur4d

+0

不,你其實不需要現在我看得更近。我沒有意識到你已經取代真正的。 –

+0

替換設置爲true,因爲如果不存在tr,則會出現問題。它被渲染到桌子外面!相同的,如果我改變限制爲'E'由於一些奇怪的原因,它被呈現在表外 – Kocur4d

0

創建指令,並在其中,在鏈接方法

link: function (scope, element, attrs) { 
      element.bind("click", function (event) { 
// Write your code here 
}