2015-07-12 89 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中的范围解析更好的方法将永远不会忘记它。 –

相关问题