2016-10-05 5 views
1

を使用し、彼らはcontrollerAngular2への移行を準備するためには、このコンポーネントを使用してまたは角1.5チュートリアルに続いて別のコントローラ

angular. 
module('myList'). 
component('myList', { 
    templateUrl: 'template.html', 
    controller: ['MyList', 
    function MyController($scope){ 
     var self = this; 
     $scope.get({ 
     id : '0' 
     }).then(function(response){ 
     return self.contents; 
     }) 
    } 
    ] 
}); 

ようcomponent()に包まれていた、でcontrollerを置くという点でベストプラクティスものですそれ自身のjsファイルですか?
この例に従うべきですか、またはこのコードを懸念して2つのファイルに分ける必要がありますか?

注:私はちょうど1.5component()クラスが去年に出てきたことに気がつきました。このリリースより前にチュートリアルで誤解されてしまいました。

+0

のように、それらをコンストラクタ関数のように使用し、それぞれのクラス/コンポーネントでインスタンスを作成することができます。 – Manish

+0

@ user32あなたは 'controller'ファイルの中に関数を作り、' component'からそれらを呼び出すと言っていますか? –

答えて

1

あなたのエンティティを別のファイルに保存することをお勧めします。moduleアイテム登録。簡単な例について説明しましょう:

あなたがUIのものであるより大きなモジュールを持っているとしましょう。module('uiStuff')

uiStuff(フォルダ)

  • uiStuff.module.js
  • uiStuff.service.js

    はmyList(フォルダ)

    • はmyList:だから私はこのような構造を示唆しています。 component.js
    • myList.controller.js
    • myList.partial.html
あなたのモジュールのファイルは常にちょうど角度の実体登録含まれます

- 将来的にはサービス、コンポーネント、ディレクティブなどをこの中に必要がないので、それはあなたにいくつかの利点を提供しますAngular2のコードを使用すると、これらのファイルを簡単に削除できます。

uiStuff.module.jsSomeService

angular.module('uiStuff') 
    .service('someService', SomeService) 
    .component('myList', myListComponent); 

- いくつかの関数コンストラクタ、及びmyListComponent、コンポーネントオブジェクトです。のは、myList.component.js下に見てみましょう:

var myListComponent = { 
    bindings: { 
     variable:'<' 
    }, 
    templateUrl: 'myList.partial.html', 
    controller: MyController 
    // and all other component settings 
} 

と同じようにコントローラとHTMLテンプレート、ちょうど別のファイルインチもちろん、私の考えでは、移行を念頭に置いて、TypeScript言語に切り替える方がよいでしょう。これは、多くのことを簡素化します。

結論: しかし、いずれにせよ、私のポイントは、ES5、ES6と活字体AngularJs移行戦略の両方のために一般的である:

  1. が異なるファイル(コントローラ、コンポーネント、サービスなど)
  2. キープでエンティティを保ちますモジュールは別ファイル(例ではuiStuff.module.js)に登録します
  3. Angular2命名規則(name.service.js、など)に従うようにしてください
0

私はそれを示唆した、 /* mylist.controller.js中*/

function MyController($scope){ 
    //your code 
    } 

は今私のビュー/コンポーネント、

declare var MyController:any; 

@Component({ 
    selector: 'app-elem', 
    templateUrl: 'test.html' 
}) 

export class MyComponent { 
    new MyController(this) 
} 

にここにいくつかの提案がありますhttp://blog.rangle.io/upgrade-your-application-to-angular-2-with-ng-upgrade/

+0

それは単なる考えです。 – Manish

+1

エクスポートクラスMyComponent { new MyController(this) } 'のような奇妙なことはありません。コンポーネントクラス*は*コントローラクラスです。そして '$ scope 'は' this'で置き換えることはできません。 – estus

+0

私がしようとしているのは、クラスのコンテキストをコントローラに渡すことです。どのような回避策ですか? – Manish

関連する問題