2015-01-14 3 views
6

コントローラーを指令のlink関数に完全に置き換えることはできますか?私はこの記事を読んでいた

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 = {}; 
     }; 
     } 
    }; 
    }); 

彼はコントローラーを作る必要がなく、コントローラーのバージョンと全く同じことをしています。ですから、どちらの方法の長所と短所が、ng-controllerで伝統的な角度を書いているのか、コントローラーが終わりまでにも必要であるのかどうか不思議です。

Hereは、最初のプランジャであり、hereが第2です。

答えて

-1

ディレクティブとコントローラは全く異なる2つのものです。

Direvtivesは、DOM操作に使用する必要があります。

コントローラを使用してDDOを知りたい場合、またはロジックのリンク機能を使用する場合は、その場合はDDOでコントローラーを使用してAPIを提供し、他のディレクティブでディレクティブを要求し、拡張ディレクティブでAPI


コントローラは、コントローラがあなたのビジネスロジックが含まれている必要があり、それが指令によって置き換えられるカントとDOM操作を持つべきではないディレクティブで

を交換することはできません。 ディレクティブ

+0

「コントローラーは指令に置き換えることはできません」という記事は読んでいますか?彼らはコントローラーを取り除いたわけではなく、むしろコントローラーを指示に組み込んだ。ほぼ正常に動作しますが、ng-controllerの必要性がなくなり、 "bindToController"属性でスコープを持つことさえありません。回答を修正してコントローラを指示に統合することをより具体的に言えるでしょうか? – m0meni

+0

いいえ、私ははい、それについての第2部 –

4

いつでもすることができます、あなたはリンク機能を使用する必要があります。 コントローラは、他の指令との通信が必要な場合にのみ使用してください。

このディスカッションの詳細はhereです。具体的にこのベストプラクティス声明:

ベストプラクティス使用コントローラあなたが他のディレクティブにAPIを公開する。それ以外の場合はリンクを使用してください。

+1

なぜこれをdownvote? – JobaDiniz

関連する問題