gpt4 book ai didi

javascript - 在 Angular.js 应用程序中进行事件驱动开发的最佳实践是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:03:16 25 4
gpt4 key购买 nike

我正在为我们的 Angular 应用程序添加一些 websocket 功能。 Websocket 对象包装在服务中。理想情况下,我们希望我们包装的套接字对象具有标准事件 API,以便我们可以在 Controller 中使用它,如下所示:(对不起,Coffeescript)

angular.module('myApp').controller 'myCtrl', ($scope, socket) ->
update = (msg)->
$scope.apply ->
#do something regarding to the msg

socket.on 'message', update

unregister: ->
socket.off 'message', update

我们实现这一目标的最佳实践/库是什么?使用jquery? Backbone 事件?任何建议都会有所帮助。谢谢!

最佳答案

您不需要使用任何库来实现此目的,只需创建一个服务,注入(inject) $rootscope 并将事件从那里发布到 rootscope,然后在您的 Controller 中监听该事件。

var socket; // this be the socketio instance.
angular.module("myApp").factory("SocketHandler", function ($rootScope) {
var handler = function (msg) {
$rootScope.$apply(function () {
$rootScope.$broadcast("socketMessageReceived", msg);
});
};

socket.on("message", handler);

$rootScope.$on("unregisterSocket", function () {
socket.off("message", handler);
});
}).controller("myCtrl", function ($scope, SocketHandler) {
var listener;
var addListener = function () {
listener = $scope.$on("messageReceived", function (e, msg) {
console.log("New Message: " + msg);
}); // $on returns a registration function for the listener
};
var removeListener = function () {
if (listener) listener();
};
});

关于javascript - 在 Angular.js 应用程序中进行事件驱动开发的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com