在其他范围内执行 angular 服务?
Executing angular services in some other scope?
我正在使用 Angular
和 Socket.IO
设计实时系统。
我正在使用两个不同的工厂,一个用于订阅主题,另一个用于为其回调函数编写逻辑并在那里进行订阅。
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.findOrder
是在 Orders
工厂范围内定义的。
那么我应该如何定义它以便 this.findOrder
在正确的范围内被调用。
尝试将您的订单服务重构为类似...
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
。最好只暴露你需要的。
我正在使用 Angular
和 Socket.IO
设计实时系统。
我正在使用两个不同的工厂,一个用于订阅主题,另一个用于为其回调函数编写逻辑并在那里进行订阅。
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.findOrder
是在 Orders
工厂范围内定义的。
那么我应该如何定义它以便 this.findOrder
在正确的范围内被调用。
尝试将您的订单服务重构为类似...
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
。最好只暴露你需要的。