2013-07-25 45 views
0

我使用Typescript與Angular和Breezejs。使用Typescript的javascript函數中的角度範圍

class CounterController { 
    count: number = 0; 
    static $inject = ['$scope']; 


    constructor($scope) { 
     $scope.vm = this; 
    } 

    setCount14(): void { 
     this.count = 14; // works 
    } 

    getQuestions(): void { 
     var manager = new breeze.EntityManager('/breeze/dbentities'); 
     var query = breeze.EntityQuery.from("Corporations").where("Name", "startsWith", "Zen"); 
     manager.executeQuery(query) 
      .then(querySucceeded); 

     function querySucceeded(data) { 
      this.count= 1; // works not! 
     } 
    } 
} 

我如何可以訪問querySucceeded功能正確的count財產?

編輯:更好:必須有辦法將打印稿功能傳遞到executeQuery(query).then

解決方案:Pass Typescript function as a Javascript function

然後調用scope.$apply()不適用的綁定。

+0

看起來像一個範圍的問題,什麼是 '這個' 裏面你的 'querySucceeded' 功能? – dougajmcdonald

+0

我不確定,但它是一個大對象。也許文檔 – daniel

回答

1

改爲使用(data) => { this.count = 1; }。或者你的「this」將沒有正確的範圍。或作爲替代方案:

var me = this; 
function querySucceeded(data) { 
    me.count= 1; // works not! 
} 

e.g:

getQuestions(): void { 
    var manager = new breeze.EntityManager('/breeze/dbentities'); 
    var query = breeze.EntityQuery.from("Corporations").where("Name", "startsWith", "Zen"); 
    manager.executeQuery(query) 
     .then((data) => { this.count= 1; }); 
} 
+0

這兩個例子奇怪的工作,只有當第二次調用。 – daniel

+0

必須有一種方法來將打印機函數傳遞給'executeQuery(query).then'? – daniel

+1

無論你傳遞什麼函數都沒有關係,在JavaScript中的這麼多情況下(幾乎總是給調用者),它總是被錯誤地綁定...... 打字稿中的()=> {}真的只是「var me = this」這個詭計對你來說......爲什麼直到第二次確實會很奇怪纔會奏效,但是你是否遇到了你正在退出Angular「scope」這樣的情況,並且需要記得在你的函數中做$ scope.apply嗎? – Jens