2015-11-18 49 views
0

我試圖實現服務類按本伍的conf視頻角1.3滿足角2.0 - 米哈爾Gołębiowski使用打字稿類服務的角度1.4.7

https://youtu.be/pai1ZdFI2dg?t=4m25s

我一直收到此錯誤:

TypeError: Cannot read property 'prototype' of undefined 

代碼如下:

var angular = window['angular']; 
angular 
    .module('myApp', []) 
    .service('myService', [MyService]) 
    .directive('test', function (myService) { 
     return { 
      restricts: 'E', 
      template: 'Directive output: {{ctrl.message}}', 
      controllerAs: 'ctrl', 
      controller: function() { 
       this.message = myService.message; 
      } 
     } 
    }); 

/* 
// Works 
function MyService() { 
    return { 
     message: "service test" 
    } 
} 
*/ 

// Does not work 
class MyService { 
    public message:string; 
    constructor() { 
    this.message = "service test by class"; 
    } 
} 

http://codepen.io/AshCoolman/pen/PPLONm?editors=001

編輯:解

簡單的包裝類的作品,這將現在做的事:

.service('myService', function() {return new MyService()}) 

其實它似乎很簡單的,現在我想起來了。示例視頻使用es6或許與Babel,而我正在使用Typescript。 在猜測,Typescript/Tracuer可能會以不同的方式做事。我將在今晚稍後調查並發表完整解釋。

編輯:解釋

馬丁Vseticka打我吧,見下文。

回答

1

.service('myService', [MyService]) 

應該

.service('myService', MyService) 

編輯:的解決方案更簡單的我猜:-)該方法與

function MyService() { 
    return { 
     message: "service test" 
    } 
} 

作品,因爲功能在JavaScript中使用hoisted

但是,下面的代碼打字稿

class MyService { 
    public message:string; 
    constructor() { 
    this.message = "service test by class"; 
    } 
} 

被transpiled到:

var MyService = (function() { 
    function MyService() { 
     this.message = "service test by class"; 
    } 
    return MyService; 
})(); 

這意味着.service('myService', MyService)不能因爲MyService工作在該點沒有被定義(即MyService = undefined)!

+0

啊,是的,這看起來很奇怪,但它僅僅是我爲示例而刪除的注射註釋的重現者。以前'.service('myService',['$ http',MyService])''。它似乎不是問題。 –

+0

我更新了我的答案。 –

+1

起重,應該猜對> _ <感謝隊友 –