AngularJS如何在controller中获取实际工厂的数据?
AngularJS how to get actual factory's data in controller?
当我收到套接字消息时,我有工厂。
我如何在我的控制器中获取返回工厂的实际数据?
请帮忙
app.factory('socket',['$rootScope', function($rootScope) {
connection.open();
var connection = new autobahn.Connection({
url: 'wss://site.com:6555/',
realm: 'realm'
});
var collection = {
'topic1': [],
'topic2': []
};
function onevent(args) {
console.log("Event:", args[0]);
collection.topic1.push(args[0]);
}
connection.onopen = function(session) {
session.subscribe(userid, onevent);
}
return {
collection: collection
}
}]);
您想在要使用数据的控制器中注入工厂。这是从工厂向控制器传送数据的基本示例。
app.factory('sharedData', function() {
return {
name: 'Daniel'
};
});
然后在您的控制器中,您可以简单地将此数据对象从工厂设置到 $scope。
app.controller('MainController', function($scope, sharedData) {
$scope.data = sharedData;
});
所以在你的情况下,只需制作一个控制器并注入 sockets
工厂,就像这样
app.controller('sockets', function($scope, sockets) {
$scope.collection = collection;
});
工厂无法向控制器推送数据,但控制器可以从工厂拉取数据。为此,将工厂注入控制器:
app.controller('yourController', ['$scope', 'socket', function($scope, socket) {
...
$scope.yourControllerCollection = socket.collection;
...
});
如果您希望控制器在套接字工厂接收到事件并更新集合时自动更新,您始终可以将 $rootScope 注入工厂并 $emit 一个您的控制器可以侦听的事件。类似于:
app.factory('socket',['$rootScope', function($rootScope) {
...
function onevent(args) {
console.log("Event:", args[0]);
collection.topic1.push(args[0]);
$rootScope.$emit('SocketCollectionUpdated', collection); // Note that you can name your event whatever you want.
}
...
}]);
app.controller('yourController', ['$rootScope', '$scope', 'socket', function($rootScope, $scope, socket) {
...
$scope.yourControllerCollection = socket.collection;
$rootScope.$on('SocketCollectionUpdated', function (event, data) {
$scope.yourControllerCollection = data;
});
...
});
当我收到套接字消息时,我有工厂。 我如何在我的控制器中获取返回工厂的实际数据? 请帮忙
app.factory('socket',['$rootScope', function($rootScope) {
connection.open();
var connection = new autobahn.Connection({
url: 'wss://site.com:6555/',
realm: 'realm'
});
var collection = {
'topic1': [],
'topic2': []
};
function onevent(args) {
console.log("Event:", args[0]);
collection.topic1.push(args[0]);
}
connection.onopen = function(session) {
session.subscribe(userid, onevent);
}
return {
collection: collection
}
}]);
您想在要使用数据的控制器中注入工厂。这是从工厂向控制器传送数据的基本示例。
app.factory('sharedData', function() {
return {
name: 'Daniel'
};
});
然后在您的控制器中,您可以简单地将此数据对象从工厂设置到 $scope。
app.controller('MainController', function($scope, sharedData) {
$scope.data = sharedData;
});
所以在你的情况下,只需制作一个控制器并注入 sockets
工厂,就像这样
app.controller('sockets', function($scope, sockets) {
$scope.collection = collection;
});
工厂无法向控制器推送数据,但控制器可以从工厂拉取数据。为此,将工厂注入控制器:
app.controller('yourController', ['$scope', 'socket', function($scope, socket) {
...
$scope.yourControllerCollection = socket.collection;
...
});
如果您希望控制器在套接字工厂接收到事件并更新集合时自动更新,您始终可以将 $rootScope 注入工厂并 $emit 一个您的控制器可以侦听的事件。类似于:
app.factory('socket',['$rootScope', function($rootScope) {
...
function onevent(args) {
console.log("Event:", args[0]);
collection.topic1.push(args[0]);
$rootScope.$emit('SocketCollectionUpdated', collection); // Note that you can name your event whatever you want.
}
...
}]);
app.controller('yourController', ['$rootScope', '$scope', 'socket', function($rootScope, $scope, socket) {
...
$scope.yourControllerCollection = socket.collection;
$rootScope.$on('SocketCollectionUpdated', function (event, data) {
$scope.yourControllerCollection = data;
});
...
});