Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS跨页面共享资源_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS跨页面共享资源

Javascript AngularJS跨页面共享资源,javascript,angularjs,Javascript,Angularjs,下面是我想制作的应用程序的简化形式,但我不确定AngularJS是否适合 页面A显示:1)一个大的倒计时计时器2)一个重置倒计时时间的按钮3)一个在新窗口/选项卡中打开另一页面A的链接 其思想是,您可以在不同的选项卡中打开多个页面A,并且所有页面上显示的倒计时时间都是同步的(即绑定到同一资源实例)。从任何页面A单击按钮重置倒计时时间将重置所有倒计时时间。希望避免使用cookie或持久存储 有人能举例说明AngularJS的最佳方法吗 非常感谢 编辑:我知道AngularJS适用于单页应用程序。我

下面是我想制作的应用程序的简化形式,但我不确定AngularJS是否适合

页面A显示:
1)一个大的倒计时计时器
2)一个重置倒计时时间的按钮
3)一个在新窗口/选项卡中打开另一页面A的链接

其思想是,您可以在不同的选项卡中打开多个页面A,并且所有页面上显示的倒计时时间都是同步的(即绑定到同一资源实例)。从任何页面A单击按钮重置倒计时时间将重置所有倒计时时间。希望避免使用cookie或持久存储

有人能举例说明AngularJS的最佳方法吗

非常感谢

编辑:我知道AngularJS适用于单页应用程序。我本质上想问的是,是否有一种方法可以让人产生多页应用程序的错觉,如果这是有意义的话。真正的诀窍是:有没有办法在重新加载页面a的情况下保持计时器同步?

您可以创建服务MultiPageDataProvider并使用WebSocket进行同步。 您必须始终通过服务在控制器之间传递数据。 在这个场景中,您不能将rootScope用于您试图实现的目标(但这是离题的)

这是原始用法,您可以将解决方案封装在服务中(MultiPageDataProvider)


  • {{data}}
angular.module('您的应用程序'[ 'ngWebSocket'//如果您愿意,也可以使用'angular websocket' ]) //WebSocket也可以工作 .factory('MyData',函数($websocket){ //打开WebSocket连接 var dataStream=$websocket('wss://website.com/data'); var集合=[]; onMessage(函数(消息){ collection.push(JSON.parse(message.data)); }); var方法={ 收藏:收藏, get:function(){ send(JSON.stringify({action:'get'})); } }; 返回方法; }) .controller('SomeController',函数(MyData){ $scope.MyData=MyData; });
你似乎忽略了AngularJS应用程序的要点。它的作用是作为一个1页的应用程序。一旦在另一个选项卡中打开另一个页面,它就不再遵循该主规则。如果所有内容都在一个窗口内打开,那么您可以使用$broadcast或$emit来执行所需操作。@austindeveloper在多个窗口中打开SPA有什么问题?Ray-可以使用PostMessageAPI在windows或WebSocket之间通信和传递数据,以保持实时同步
      <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
  <script src="bower_components/angular-websocket/angular-websocket.js"></script>
  <section ng-controller="SomeController">
    <ul>
      <li ng-repeat="data in MyData.collection track by $index">
        {{ data }}
      </li>
    </ul>
  </section>
  <script>
    angular.module('YOUR_APP', [
      'ngWebSocket' // you may also use 'angular-websocket' if you prefer
    ])
    //                          WebSocket works as well
    .factory('MyData', function($websocket) {
      // Open a WebSocket connection
      var dataStream = $websocket('wss://website.com/data');

      var collection = [];

      dataStream.onMessage(function(message) {
        collection.push(JSON.parse(message.data));
      });

      var methods = {
        collection: collection,
        get: function() {
          dataStream.send(JSON.stringify({ action: 'get' }));
        }
      };

      return methods;
    })
    .controller('SomeController', function (MyData) {

      $scope.MyData = MyData;
    });
  </script>