2017-06-09 2 views
0

コンポーネント(AngularJS 1.6)をjavascriptからtypescriptに変換しています。活字は私のcreateProject方法で$httpに文句AngularJsでtypescriptとの依存性注入を使用する

class NewProjectCtrl { 
    price: number; 

    static $inject = ['$http']; 

    constructor($http) { 
     let ctrl = this; 
     ctrl.price = '50'; 
     ... 
    } 

    createProject() { 
     $http.post('/api/project', ctrl.project) 
     ... 
    } 
} 

angular 
    .module('app.projects-selection') 
    .component('newProject', { 
     templateUrl: 'app/projects-selection/components/new-project/new-project.tmpl.html', 
     controller: NewProjectCtrl, 
     bindings: { 
      user: '<', 
     } 
    }); 

(名$ HTTPを見つけることができません)。私が見つけることができるすべての例は、コンストラクタで依存関係注入を使用するだけです。

答えて

0

namespace myNameSpace { 

    class NewProjectCtrl { 
    private static $inject = ['$http']; 

    public price: number; 

    constructor(private $http) {} 

    createProject() { 
     this.$http.post('/api/project', ctrl.project) 
    } 
    } 

    class NewProjectComponent implements ng.IComponentOptions { 
    constructor() { 
     this.bindings: { 
     user: '<', 
     }; 
     this.templateUrl: 'app/projects-selection/components/new-project/new-project.tmpl.html'; 
     this.controller: NewProjectCtrl; 
    } 
    } 

    angular 
    .module('app.projects-selection', []) 
    .component('newProject', new NewProjectCtrl()); 
} 
+0

どここのスタイルガイドは次のとおりです。

使用this.$httpを注入した後も、私はstyleguidesに応じてあなたにいくつかのアプローチを提案してみましょうか? ngアップグレードガイド(https://angular.io/docs/ts/latest/guide/upgrade.html#!#switching-to-typescript)に従った。ガイドは更新されていませんか? – Per

+0

私は[Todd Motto](https://github.com/toddmotto/angularjs-styleguide/tree/master/typescript)と[John Papa](https://github.com/johnpapa/angular-styleguide/tree/)を使用しています。マスター/ a1)スタイルガイド –

1

あなたは単なる機能ではなく、クラスを作成しています。 $httpconstructor関数に注入され、そこに存在しますが、ではなく、createProjectに存在します。あなたは、プロパティとしてインスタンス上に格納する必要があります:

private $http; // should be declared first too, preferably with type hint 

constructor($http) { 
    this.$http = $http; 
} 

createProject() { 
    this.$http.post('/api/project', ctrl.project) 
} 

活字体は、そのための速記を持っています

constructor(private $http) { 
} 

createProject() { 
    this.$http.post('/api/project', ctrl.project) 
} 

let ctrl = this

もかなり奇妙なようで、私はそれは多くの意味を作るとは思いません。私はあなたがコンストラクタでやっている他に何か分からないが、私はあなたがこれに持っているものリファクタリングしたい:あなたは thisを忘れてきた

class NewProjectCtrl { 
    price: number = 50; 

    static $inject = ['$http']; 

    constructor(private $http) { } 

    createProject() { 
     this.$http.post('/api/project', ctrl.project); 
    } 
} 
関連する問題