Javascript 如何使用动态数据WebSocket运行AngularJS服务

Javascript 如何使用动态数据WebSocket运行AngularJS服务,javascript,html,angularjs,websocket,Javascript,Html,Angularjs,Websocket,我不熟悉angular,尝试处理服务器定期发送的数据 我有一个主html页面,并设置了一个主js文件。在主页中,我通过man html页面的ngRoute导航子html页面。这是我的main.js var serviceMod = angular.module("service", ['ngRoute']); serviceMod.config(['$routeProvider', function($routeProvider) { $routeProvider.

我不熟悉angular,尝试处理服务器定期发送的数据

我有一个主html页面,并设置了一个主js文件。在主页中,我通过man html页面的
ngRoute
导航子html页面。这是我的main.js

    var serviceMod = angular.module("service", ['ngRoute']);

serviceMod.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/sell', {
        templateUrl: 'sellstats.html',
        controller: 'sellstats'
    }).
      when('/cache-service', {
        templateUrl: 'buy.html',
        controller: 'buyingstats'
      }).
      otherwise({
        redirectTo: '/home.html'
      });
}]);      
my main.js连接到web套接字中的服务器。
var socket=newsockjs(URL);
stompClient=Stomp.over(套接字)

它每10秒接收一次响应

我想通过angular将这些结果发送到那些子html页面,子html文件中的子angular函数应该能够通过WebSocket更新上次收到的响应。(我使用angular 1.2)

请让我知道
1.如何绑定通过WebSocket接收的动态数据?

2.sub html页面中的sub angular js函数将如何访问更新的值

如果将套接字侦听器封装到角度服务中,并使该服务负责解析从服务器接收到的消息,然后直接将结果作为服务的json对象公开,或通过角度变量间接公开。然后,您可以让角度变量将您的服务或变量注入到要使用数据的页面的控制器中,然后,您可以将服务的输出或变量作为控制器上的属性公开,然后将视图绑定到它们,就像控制器上的任何其他变量一样


当angular注入服务时,它负责实例化它,因此它需要在其中包含逻辑,这意味着它会自动连接,而且由于服务是单实例对象,您不需要担心创建多个实例,它的生命周期也与应用程序的生命周期相同。

最好的解决方案是运行您的应用程序套接字连接作为一个
angularjs服务
,然后可以轻松地在控制器之间注入-这就是您访问子函数(控制器)中的值的方式

最好的绑定方式是以双向数据绑定的方式使用控制器内部的服务,这将自动更新数据

我已经用jsonp而不是套接字为您制作了一个简单的工作示例,但它很容易更改


感谢您的回答,非常感谢代码示例。看来这会解决我的问题。但还有一件事需要知道:在我的js主页面中,页面中注入了带有
“$routeProvider”
的控制器,正如我的问题所述。假设在我的
sellstats.html
页面中有一个名为“sellstats.js”的js文件。如何使用sellState.js中设置为
$scope
的值?如何写出角函数?我之所以希望这样做是因为:我希望避免在主html中不使用的脚本。例如,假设在您的示例中,controllerTwo只需要在sellState html上执行,我就可以运行服务。但是正如你提到的,双向绑定对我来说不起作用。我尝试返回静态值。它可以用{val}显示在页面上,但是当服务器更新消息时,消息不会更新。这意味着,服务方法,
var msg={val:'firstInitValue'}
并且当设置websocket订阅值时>
msg.val=serverResponse,我在控制器中将值设置为scope,然后在页面中,{{msg.val}}输出为'firstInitValue',而不是服务器响应的值。哪里会出问题。我检查了你的样品。如果您使用第三方代码连接到WebSocket,则需要使用$scope.$apply()或$timeout(不带时间值)在接收范围外的数据时触发摘要过程,对于不包含您不需要的JS的其他要求,这是非常有争议的。如果它是一大块代码,那么当然,您可能需要将其分开,但如果它少于200行,则可能会增加执行时间,从而节省时间。
app.service('timeService', function($http, $timeout){
  var service = {data: null}
  function getTime(){
    $http.jsonp('http://time.jsontest.com/?callback=JSON_CALLBACK').then(function(response){
      service.data = response.data
      $timeout(getTime, 5000)
    })
  }

  getTime()

  return service
})