2017-05-03 11 views
1

私は、コード最適化というmangleの問題に直面しています。私は角度を使用し、必要とすべてのサービス/工場の場合を除いて正常に働いた。そこにいくつかの例(helloService.coffee)AngulaJs CoffeeScript Grunt

define 'HelloService', [], -> 
    'use strict' 
    HS = ($timeout) -> 
     sayHello: (name) -> 
     $timeout -> 
      console.log 'Hello: ' + name 
     ,2000 
    HS.$inject = ['$timeout'] 
    HS 

とコントローラで、私はこのような何かます(mainController.coffee)を

define 'MainController', ['HelloService'], (HS) -> 
    'use strict' 
    MC = ($scope) -> 
    HS.sayHello 'Stack Overflow' # it return sayHello is not a function 
    # do something with scope here 
    MC.$inject = ['$scope'] 
    MC 

そして、どのように見えるかapp.coffeeがあります:

define 'app', ['angular', 'HelloService', 'MainController'],(angular, HelloService, Maincontroller)-> 
    app = angular.module 'app', [] 
    app.service 'helloService', HelloService 
    app.controller 'mainController', MainController 

    app.bootstrap = -> 
    angular.element(document).ready -> 
     angular.bootstrap document, ['app'] 
    app 

そしてどこか(main.coffee)

requirejs.config 
    baseUrl: '' 
    paths: 
    angular:['cdn_url','angular_fallback_in_project_dir'] 
    shim: 
    angular: 
     exports: 'angular' 
     deps: [] 

require ['app'], (app) -> 
    app.bootstrap() 

これはコードを維持しやすくするだけでなく、親しみやすいものです。 私が何かしようとした場合:

hs = new HS() 

を、私はhs.saylHello「文字列」を呼び出すことができますが、今$ timeoutは未定義であるか、いつか関数ではありません。 ご協力いただきありがとうございます。

答えて

0

使用する

代わり
define 'MainController', [], -> 
    'use strict' 
    MC = ($scope, HelloService) -> 
     HS.sayHello 'Stack Overflow' # it return sayHello is not a function 
     # do something with scope here 
    MC.$inject = ['$scope', 'HelloService'] 
    MC 

のロングコードのチェックがサービスをロードするために必要とした後は、「HelloServiceは、」我々は、角にその仕事を与えます。その選択の理由は、newキーワードを使用して引数としてlist(in list)をインスタンスとしてインラインで挿入するので、すべてのプロパティが利用可能になるからです。あなたは角を使用しない場合は しかし、我々はこの

define 'MainController', ['HelloService'], (HS) -> 
    'use strict' 
    MC = ($scope) -> 
    HSS = new HS() 
    HSS.sayHello 'Stack Overflow' # it return sayHello is not a function 
    # do something with scope here 
    MC.$inject = ['$scope'] 
    MC 

のようにそれを書かなければならないので、動作は同じです。それで全部です。