2016-04-19 3 views
1

私は2つのサービスをバワーで配布しています。 カテゴリー(categories.service.js) 製品(product.service.js)結合時に角張ったサービスが壊れます

両者はこのように同じ構造を持っている:

(function() { 
    'use strict'; 

    angular 
    .module('www', []) 
    .service('Products', Service); 

    Service.$inject = ['Restangular','$stateParams','$log']; 

    /* @ngInject */ 
    function Service(Restangular, $stateParams, $log) { 

    var service = { 
     getProducts: getProducts, 
     getProduct: getProduct 
    }; 

    return service; 

    function getProducts(numberOfProducts, $stateParams) { 

     return Restangular.all('/products?searchCriteria[page_size]=' + 
     numberOfProducts).customGET(); 
    } 

    function getProduct(sku) { 
     return Restangular.one('products/' + sku).customGET(); 
    } 

    } 
})(); 

その後、私は私のNPM-スクリプトが

"build": "mkdir dist; npm run build:js & npm run build:min", 
"build:js": "uglifyjs src/categories.service.js -b 'indent-level=2, quote_style=1' -o dist/service.js", 
を構築してい

何らかの理由でservices.jsファイルを追加すると、サービスのうちの1つだけが動作します。

私はそれらを個別に使用し、1つのファイル:)

ノートに激突ない場合、それは正常に動作します:これは私がビルド

(function() { 
    'use strict'; 
    angular.module('www', []).service('Categories', Service); 
    Service.$inject = [ 'Restangular', '$log' ]; 
    function Service(Restangular, $log) { 
    var service = { 
     getCategories: getCategories, 
     getCategory: getCategory 
    }; 
    return service; 
    function getCategories() { 
     return Restangular.all('categories').customGET(); 
    } 
    function getCategory(id) { 
     return Restangular.one('category/' + id).customGET(); 
    } 
    } 
})(); 

(function() { 
    'use strict'; 
    angular.module('www', []).service('Products', Service); 
    Service.$inject = [ 'Restangular', '$stateParams', '$log' ]; 
    function Service(Restangular, $stateParams, $log) { 
    var service = { 
     getProducts: getProducts, 
     getProduct: getProduct 
    }; 
    return service; 
    function getProducts(numberOfProducts, $stateParams) { 
     return Restangular.all('/products?searchCriteria[page_size]=' + numberOfProducts).customGET(); 
    } 
    function getProduct(sku) { 
     return Restangular.one('products/' + sku).customGET(); 
    } 
    } 
})(); 
+0

私は、 'www'モジュールの再宣言が以前の初期化(古いサービスで)を上書きするものと思われます。 –

+0

はい、それは問題であるようです(ちょうどそれがモジュールをオーバーライドすることを学んだ)..ソリューション上の任意のアイデア? – Mackelito

+0

私は 'www.products'や 'www.categories'のような名前空間を使うべきだと思うけど、依存関係として1つのモジュールだけが好きです。 – Mackelito

答えて

1

角度スタイルガイドsays that:

から得る出力され

一度だけ設定し、他のすべてのインスタンスに対して取得します。

なぜですか?モジュールは1回だけ作成してから、 ポイント以降で取得してください。

だから私は、サービスとは別のファイルにモジュールを宣言推薦する:サービスを宣言しながら、

(function() { 
    // Create module 
    angular.module('my-www', []); 
})(); 

そしてはにそれを得る:

(function() { 
    // Retrieve module 
    angular.module('my-www').service(...); 
})(); 

これは解決する必要があります問題。追記として


、私は、アプリケーションが使用することをお勧めします他のモジュールとの名前の競合を避けるために、モジュールのためのより多くの固有の名前を作成することをお勧めします。

+0

スポットライト!.. 'app.js'を作成するモジュールを作成するトリックを行った!.. thx! – Mackelito

関連する問題