2016-04-16 16 views
4

Angular 1.5コンポーネントを使用したサービスの使用例はありますか?Angular 1.5コンポーネントでサービスを注入する例

サービスをAngular 1.5コンポーネントに挿入しようとしていますが、機能しません。

私はそうのようなログイン・コンポーネントを持っている:私のサービスはこのようになります

class Login { 
    constructor($scope, $reactive, $state, myService) { 
     console.log(myService.somevariable); //doesn't work 
    } 
} 

// create a module 
export default angular.module(name, [ 
    angularMeteor 
]).component(name, { 
    templateUrl: 'imports/ui/components/${name}/${name}.html', 
    controllerAs: name, 
    controller: Login 
}); 

angular.module(name).service("myService", function() { 
    this.somevariable = 'somevalue'; 
}); 

私はちょうどcomponent.What午前中に注入されたサービスを受けることができるように思われるカント私は間違っている?

SOLUTION:

sebenalernの助けを借りて、私が働いてそれを得ました。

正規表現を使用してメールアドレスを検証するサービスが必要でした。私はそのようにのようなサービスを注射し

import angular from 'angular'; 
import angularMeteor from 'angular-meteor'; 
class Validator { 
    validateEmail(email) { 
     var re = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
     return re.test(email); 
    } 
} 

const name = 'validator'; 

// create a module 
export default angular.module(name, [ 
    angularMeteor 
]) 

.service("Validator", Validator); 

::このことができます

import {name as Validator} from '../../../api/services/validator' 

class Login { 
    constructor($scope, $reactive, $state, Validator) { 
     'ngInject'; 
     this.$state = $state; 

     $reactive(this).attach($scope); 
     this.Validator = Validator; 
    } 

    login() { 
     if(this.Validator.validateEmail(this.credentials.email)) { 
      // email is valid. 
     } 
    }  
} 

const name = 'login'; 

export default angular.module(name, [ 
    angularMeteor, 
    Validator 
]).component(name, { 
    templateUrl: `imports/ui/components/${name}/${name}.html`, 
    controllerAs: name, 
    controller:Login 
}) 

希望:)

+0

あなたはコンポーネントとはどういう意味ですか? – sebenalern

+0

質問を更新しました。 Angular 1.5コンポーネントを使用していますが、Angularサービスをインジェクションする方法がわかりません。 Angular 1.5が新しくなって以来、私はドキュメントも見つけられませんでした。 – lostsoul29

+0

エラーメッセージが表示されますか? – sebenalern

答えて

4

だから私は見る一つの問題は、あなたがキーワードを使用しなければならないです、私はこのようにそれをやりましたこのはコンストラクタ内にあります

this.$scope = $scope; 

もう1つはpです簡単にrobablyクラスや利用機能から離れて滞在する:

class Login { 
constructor($scope, $reactive, $state, myService) { 
    console.log(myService.somevariable); //doesn't work 
    } 
} 

は次のようになります。私には

angular 
.module('name') 
.service('myService', myService); 

function myService() { 
    this.somevariable = 'somevalue'; 
} 

は、それはたくさんのクリーナーです。

まず、我々はモジュールを宣言:

angular.module('name', []); 
またES6クラスについては、別の事は私が思いついた link.

今ここで作業コードがあるを参照してください詳しくは

ES6 Classes are not hoisted, which will break your code if you rely on hoisting

です

次に、サービスを登録して、サービス定義を作成します。

angular 
    .module('name') 
    .service('myService', myService); 

function myService() { 
    this.somevariable = 'somevalue'; 
} 

次に、私たちのコントローラーと同じ手順を実行し、$ scopeと私たちのサービスをそこに注入します。

angular 
    .module('name') 
    .controller('Login', Login); 

function Login($scope, myService) { 
    $scope.someVar = myService.somevariable; 
} 

最終私は、私たちのコンポーネント登録:

angular 
    .module('name') 
    .component('my-html', { 
    templateUrl: 'my-html.html', 
    controller: Login 
}); 

をそして、それはjavascriptの側です。ここで

は私のhtmlコードです:

<!DOCTYPE html> 
<html lang="en-us" ng-app='name'> 
    <head> 
     <script src="//code.angularjs.org/1.5.0-rc.1/angular.js"></script> 
     <script src="controller.js"></script> 
    </head> 
    <body > 
     <h ng-controller="Login">{{ someVar }}</h> 
    </body> 
</html> 

私はこれが役に立てば幸い!

+0

角度1.5では機能しないようです。私は質問を更新しました。エラー:myServiceが定義されていません。 – lostsoul29

+0

あなたの助けを借りて、私のコードを少しずつ違う方法で動かすことができました。私は自分の解決策を掲載し、あなたの答えを受け入れました。ありがとう! – lostsoul29

0

ここで私はそれをやっているし、それはうまく動作します。それはクラスで正常に動作します。私はあなたがTypeScriptを使用していると仮定します。

class AdminHomeService { 
    consignment: IConsignment; 

    get:() => IConsignment; 

    constructor() { 
     this.consignment = new Consignment(); 
     this.consignment.id = 10; 
     this.consignment.customer = "Customer3"; 
     this.consignment.customerList = [{ id: 1, name: "Customer1" }, { id: 2, name: "Customer2" }, { id: 3, name: "Customer3" }]; 
     this.consignment.shipperList = [{ key: "1", value: "Shipper1" }, { key: "2", value: "Shipper2" }, { key: "3", value: "Shipper3" }]; 
     this.consignment.consigneeList = [{ key: "1", value: "Consignee1" }, { key: "2", value: "Consignee2" }, { key: "3", value: "Consignee3" }]; 
     this.consignment.billingList = [{ key: "1", value: "Billing1" }, { key: "2", value: "Billing2" }, { key: "3", value: "Billing3" }]; 
     this.consignment.carrierList = [{ key: "1", value: "Carrier1" }, { key: "2", value: "Carrier2" }, { key: "3", value: "Carrier3" }]; 

     this.get =() => { 
      return this.consignment; 
     } 
    } 
} 

class AdminHomeComponentController { 
    consignment: IConsignment; 
    selectedCustomer: any; 

    static $inject = ["adminHomeService"]; 

    constructor(private adminHomeService: AdminHomeService) { 
     this.consignment = new Consignment(); 
     this.consignment = this.adminHomeService.get(); 

     this.selectedCustomer = {}; 
     this.selectedCustomer.selected = { "name": this.consignment.customer }; 
    } 

    customerAddClick(): void { 

    } 
} 

class AdminHomeComponent implements ng.IComponentOptions { 
    bindings: any; 
    controller: any; 
    templateUrl: string; 
    $routeConfig: angular.RouteDefinition[]; 

    constructor() { 
     this.bindings = { 
      textBinding: "@", 
      dataBinding: "<", 
      functionBinding: "&" 
     }; 
     this.controller = AdminHomeComponentController; 
     this.templateUrl = "templates/admin.home.html"; 

     //this.$routeConfig = [ 
     // { path: "/admin", name: "AdminHome", component: "adminHome", useAsDefault: true } 
     //]; 
    } 
} 

angular.module("adminHome", []) 
    .component("adminHome", new AdminHomeComponent()) 
    .service("adminHomeService", AdminHomeService); 

この投稿は、私をたくさん助けた:http://almerosteyn.com/2016/02/angular15-component-typescript

関連する問題