2015-01-14 63 views
6

我讀通過這篇文章:可以通過指令中的鏈接函數完全替換控制器嗎?

http://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.html

文獻提出,控制器,以消除需要被整合到這樣的指令用不完NG控制器:

angular.module('contestantEditor', []) 
    .directive('cContestantEditorForm', function() { 
    return { 
     scope: { 
     contestants: '=' 
     }, 
     templateUrl: 'contestant_editor.html', 
     replace: true, 
     controller: 'ContestantEditorFormCtrl', 
     controllerAs: 'ctrl', 
     bindToController: true 
    }; 
    }) 
    .controller('ContestantEditorFormCtrl', function($scope) { 

    this.contestant = {}; 

    this.save = function() { 
     this.contestants.push(this.contestant); 
     this.contestant = {}; 
    }; 

    }); 

在但是,有人提出這個解決方案:

angular.module('contestantEditor', []) 
    .directive('cContestantEditorForm', function() { 
    return { 
     scope: { 
     contestants: '=' 
     }, 
     templateUrl: 'contestant_editor.html', 
     replace: true, 
     link: function (scope) { 
     scope.contestant = {}; 

     scope.save = function() { 
      scope.contestants.push(scope.contestant); 
      scope.contestant = {}; 
     }; 
     } 
    }; 
    }); 

它達到t他與控制器的版本完全一樣,不需要製作控制器。所以我很好奇兩種方法的優點和缺點,而不是用傳統的ng控制器來書寫角度,以及控制器到底是否是必要的。

Here是第一個蹲跳者,第二個是here

回答

-1

指令和控制器是兩個完全不同的東西。

指令應該用於DOM操作。

如果你想知道在DDO中使用控制器或者爲你的邏輯使用鏈接功能,那麼答案就是你應該在DDO中使用控制器,在這種情況下,當你想提供API並在其他指令中需要你的指令,在擴展指令


控制器API無法通過指令替代

控制器應該包含你的業務邏輯和它不能被指令所取代,不應該有DOM操作。

+0

關於「控制器不能被指令取代」,你讀過這篇文章嗎?他們沒有擺脫控制器,而是將其整合到他們的指令中。它的工作原理幾乎與正常情況完全一樣,但是通過「bindToController」屬性消除了對ng-controller的需求,甚至沒有範圍。你能否修改你的答案,以便更具體地將控制器集成到指令中? – m0meni

+0

不,但我會,是的第二部分關於那 –

4

指令,你應該使用鏈接功能只要你可以。僅當需要與其他指令進行通信時才使用控制器

你可以找到更多關於此討論here。特別是這個最佳實踐聲明:

最佳實踐使用控制器,當你想一個API暴露給其他指令。否則使用鏈接

+1

爲什麼downvote這? – JobaDiniz

相關問題