2016-08-01 14 views
0

ディレクティブを残しておけば、ある状態や動作で特定の部分のHTMLを変更するだけで、コントローラを一般的にビューの途中に割り当てることができます。あなたはどのレベルでも、最上位レベルでさえこれを行うことができます。ビューとコントローラは緊密に結合されています。AngularJSでルート上にコントローラを定義できるのはなぜですか?

コントローラをルートレベルに割り当てることができる理由は何ですか?私はこれを理解していない、これの背後にある哲学は何ですか?ビュー自体の上部ではなく、ビューの外側にコントローラを割り当てることの追加の利点は何ですか。コントローラーを別の実装に切り替えることはできません。私はこれが決して見たことがない。

/編集:おそらく注射される手動の解決をするために必要ですか? (John Papa's exampleを参照してください)

+0

(あなたがtemplateUrlを使用している場合)ですから、/交換コントローラ、だけでなく、あなたのビューを再利用することができます – doge1ord

+0

最後の時間は、ビューのコントローラがロードする前に約束を解決する唯一の方法は、状態の定義を介していました'$ onInit'がコンポーネントのために存在するにもかかわらず、ディレクティブ定義ではできません。理論では –

+0

@ doge1ord、はい。しかし、私は野生でこれを見たことがない、しかし、誰も自分自身を含むルートのコントローラを定義します(しかし、なぜそれが良いのかわかりません)。 –

答えて

1

私は、ルートにコントローラを定義するオプションがある他の正当な理由があると確信していますが、これはかなり大きなものだと思います。このシナリオを考える:

  • あなたが様々な経路を再利用したいテンプレートを持っている/状態
  • あなたがルートに基づいてテンプレートに別のコントローラを割り当てることができます。

テンプレートでng-controllerを使用している場合は、私の知る限り、そのテンプレートを別のコントローラで再利用することはできません。

ルート経由でコントローラを割り当てると、柔軟性が増します。

私はそれとして、この例ではUI.Routerを使用するつもりだ

標準的なアプローチは、私が経験を持っているすべてです。

.state('users', { 
    templateUrl: 'person.html' 
    controller: 'UsersController' 
}) 

.state('admin', { 
    templateUrl: 'person.html' 
    controller: 'AdminController' 
}) 

同じテンプレート、異なるコントローラ、異なるコントローラを使用します。

動的なアプローチ

確か

ない別の実装のためのコントローラを切り替える機能

私は、このユースケースのメリット/デメリットを主張しませんが、私はそれを自分自身を使用しました

私はそれをSOや他のブログで議論しているのを見ました。私は、UIのルータを使用

.state('entity', { 
    templateUrl: 'person.html' 
    controller: function(...injectables){ 
     var UserController = function(){ ... } 
     var AdminController = function(){ ... } 

     var ControllerClass = isAdmin ? AdminController : UserController; 
     return new ControllerClass()   
    } 
}) 
+0

角度スタイルガイド(https:// github)を参照しながらこれを読んでください。com/johnpapa/angular-styleguide/blob/master/a1/README.md#style-y038 – jusopi

関連する問題