2016-04-08 24 views
1

Yapmak istediğim, bazı argümanlarla (yeni Kitap ('someTitle')) başlatılabilen bir model (ör. Kitap) ES6 ile açısal olarak oluşturmaktır. Ben aşağıdaki çalışma var (biz böyle $ http gibi bir şey enjekte etmek gerek herhalde):ES6 ile Angular'da modeller oluşturma

function foo($http) { 
    return class Book { 
     constructor(title) { 
      this.title = title; 
     } 
     fetch() { 
      return $http.get('api/book/' + this.title); 
     //... 
     } 
    }; 
} 
angular.module('app') 
    .service('Book', ['$http', function($http) { 
     return foo($http); 
    }]; 

sorun bu şeyler yapmanın temiz bir yol gibi görünmüyor olduğunu. Ayrıca hangi problemlerin çıkabileceğinden emin değilim. Aynı şeyi elde etmek için daha iyi bir yol önerebilir mi?

+0

Neden "foo" işleviniz var? Sınıfı fabrikada iade edebilirsin. Bu daha açık hale getirirdi. Açısal olarak nasıl yapılır1. Ve bu arada, bu sorunun es6 ile nasıl bir ilişkisi olduğunu anlamıyorum. Es5 sınıflarını kullanarak aynı olurdu. –

cevap

1

Bunu bir fonksiyonda sınıfa yazmak yerine, sınıf için bir fabrika döndüren statik bir fabrika işlevine sahibim. Bu gerçekten temiz bakmak almak için ...

class Book { 
    constructor(public $http) {} 

    set(title) { 
     this.title = title; 
    } 

    fetch() { 
     return this.$http.get('api/book/' + this.title); 
    } 

    static factory() { 
     let service = ($http) => { 
     return new Book($http); 
     } 

     service.inject = ['$http']; 
     return service; 
    } 
} 

angular.module('app') 
     .service('Book', Book.factory()); 

başka yolu da böyle bir şey Görünüşe Angular2 yaptıklarını şu anda daktilo çalışıyoruz ES2016/2017 dekoratörler, beraberdir. Neyse, sadece bir fikir!

+1

Cevabınız için teşekkür ederiz. Modelin başlık ile örneklendirilmesini isterim (ör. Yeni Kitap ('someTitle'), fakat sizin yaklaşımınızda Kitap $ http ile oluşturulur ve başlığı ayarlamak için set (başlık) çağırmanız gerekir ... – brickingup

0

Fabrikada tanımlanmış ve statik yöntem yaratan bir sınıf oluşturarak, sınıf adı aracılığıyla yönteme erişebilirsiniz.

class refreshFactory { 

    constructor($scope) { 
     'ngInject'; 
     this.callbacks = {}; 
     this.$scope = $scope; 
    } 

    testmethod() { 
     alert(); 
    } 


    static refreshFunctions ($scope) { 
     'ngInject'; 
     return new refreshFactory($scope); 
    } 
} 

export default refreshFactory; 

// Create the module where our functionality can attach to 
let CommonFactory = angular.module('common.factories', []); 

import refreshFactory from './refresh.factory'; 
CommonFactory.factory('refreshFactory', refreshFactory.refreshFunctions);