2015-07-12 123 views
0

我正在設計一個使用AngularSocket.IO的RealTime系統。在其他一些範圍內執行角度服務?

我使用兩個不同的工廠一個用於訂閱主題和其他用於爲其回調函數編寫邏輯並在其中訂閱它。

pubsub.js

app.factory('PubSub', function(){ 
    return{ 
    subscribe: function(event, callback){ 
     socket.on(event, callback); 
     }, //end subscribe 
    } 
}) 

orders.js現在

app.factory('Orders', function(PubSub){ 
    return{ 
     subscribeOrderUpdate : function(){ 
     //Subscribing 
     PubSub.subscribe('onUpdateOrder', this.onOrderUpdate); 
     }, 

     //Callback function 
     onOrderUpdate: function(order){ 
     var result = this.findOrder(order.Id); 
     console.log('Order has been updated'); 
     }, 

     findOrder(OrderId){ 
     //logic to find order based on orderId 
     } 

    }; 
}); 

當我從我的控制器調用這個

//Controller.. 
app.controller('OrdersPage', function($scope, Orders){ 
    Orders.subscribeOrderUpdate(); 
    /* Shows Error this.findOrder() is not a function*/ 
}); 

現在,當我打電話給這個工廠時,它的顯示錯誤this.findOrder不是函數。

搜索後,我發現因爲我的回調函數onOrderUpdate 獲取調用在PubSub廠範圍內因而其示值誤差,因爲this.findOrderOrders廠範圍內的定義。

那麼我應該如何定義它,以便在正確的範圍內調用this.findOrder

+0

您是否嘗試將其定義爲函數? 'findOrder:function(OrderId)' –

+0

不,因爲我需要在工廠內部定義它,因爲findOrder中還有其他的邏輯defiend需要在裏面訂單工廠範圍 –

回答

1

嘗試重新分解你的訂單服務,像..

app.factory('Orders', function(PubSub){ 

    var service = { 
    subscribeOrderUpdate : subscribeOrderUpdate 
    }; 

    return service; 
    ////////////////////////////// 

    function subscribeOrderUpdate(){ 
    //Subscribing 
    PubSub.subscribe('onUpdateOrder', onOrderUpdate); 
    } 

    function onOrderUpdate(order){ 
    var result = findOrder(order.Id); 
    console.log('Order has been updated'); 
    } 

    function findOrder(OrderId){ 
    //logic to find order based on orderId 
    } 

}); 

如果您需要使用您的findOrder方法是直接在其他地方可以公開它就像subscribeOrderUpdate方法,但它並不像您需要將其與onOrderUpdate一起移除。最好只揭露你需要的東西。

+0

現在它的工作。它在JavaScript中的範圍解析更好的方法將永遠不會忘記它。 –

相關問題