当前位置: 首页 > 面试题库 >

在多个angular.js应用程序之间共享一项服务

子车灿
2023-03-14
问题内容

我正在建立一个电子商务网站(基于shopify),并且使用多个小型angularjs应用程序来处理诸如快速购物车,收藏夹,过滤产品和其他一些较小物品的事情。我最初使用的是一个大型应用程序(具有路由和所有功能),但是当我没有完整的REST
API时,这有点限制性。

我想在角度应用程序之间共享一些服务(购物车服务,所以我可以有一个快速添加按钮,它将反映在微型购物车等中),但我不确定最好的解决此问题的方法(如果有方法)。仅与服务共享模块不会在应用程序中保持相同的状态。

我尝试了一下,但是似乎两个应用之间的状态都没有更新。以下是我尝试使用的javascript。它也在jsfiddle上,附带HTML: http
//jsfiddle.net/k9KM7/1/
    angular.module('test-service', [])
      .service('TestService', function($window){
        var text = 'Initial state';

        if (!!$window.sharedService){
          return $window.sharedService;
        }

        $window.sharedService = {
          change: function(newText){
            text = newText;
          },
          get: function(){
            return text;
          }
        }

        return $window.sharedService;
      });

    angular.module('app1', ['test-service'])
      .controller('App1Ctrl', function($scope, TestService){
        $scope.text = function(){ return TestService.get() }
        $scope.change = function(){ TestService.change('app 1 activated') }
      });

    angular.module('app2', ['test-service'])
      .controller('App2Ctrl', function($scope, TestService){
        $scope.text = function(){ return TestService.get() }
        $scope.change = function(){ TestService.change('app 2 activated') }
      });

    var app1El = document.getElementById('app1');
    var app2El = document.getElementById('app2');

    angular.bootstrap(app1El, ['app1', 'test-service']);
    angular.bootstrap(app2El, ['app2', 'test-service']);

任何帮助,将不胜感激


问题答案:

sharedService被共享,但一个角的应用程序不知道的东西在其他应用程序更新,所以它不揭开序幕$digest。您必须通过调用手动告诉$rootScope每个应用程序启动$digest``$rootscope.$apply()

小提琴:http :
//jsfiddle.net/pvtpenguin/k9KM7/3/

      angular.module('test-service', [])
      .service('TestService', function($rootScope, $window){
        var text = 'Initial state';
        $window.rootScopes = $window.rootScopes || [];
        $window.rootScopes.push($rootScope);

        if (!!$window.sharedService){
          return $window.sharedService;
        }

        $window.sharedService = {
          change: function(newText){
            text = newText;
            angular.forEach($window.rootScopes, function(scope) {
              if(!scope.$$phase) {
                  scope.$apply();
              }
            });
          },
          get: function(){
            return text;
          }
        }

        return $window.sharedService;
      });


 类似资料:
  • 有没有一种方法来配置包含在不同应用程序(战争或耳朵)中的各种persistence.xml,这些应用程序都使用包含所有实体的共享罐? 比如: 对于war中的所有文件(persistence.xml、hbm.xml和java类),映射工作正常,但我需要与所有应用程序共享java实体,因此我希望将它们移动到模型中。罐子 坚持不懈xml TipoAbitazione.hbm.xml TipoAbitaz

  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我们遇到了适用于多线程的方案。 在主线程中,执行一些逻辑操作并更新数据库,在某种程度上,它将调用另一个服务来更新数据库,该服务在另一个线程中运行。 我们希望两个线程共享同一个事务,这意味着任何一个线程中的任何一个操作都将失败,那么另一个线程中的该操作也将被回滚。 但是工作了几天,我发现一些帖子说JTA不支持多线程。当前我们使用Bitronix作为JTA提供者,有没有人知道Bitroni

  • 问题内容: 我一次运行2个单独的Java应用程序。(两个单独的javaw.exe)在它们运行时,我需要在它们之间共享一个对象。 没有永久存储的最简单方法是什么? 问题答案: 对象及其实例变量可以在Java程序的线程之间共享,这是非常简单的任务。 如果您需要在两个程序之间共享对象(例如它的对象)而没有数据存储,那么下一个选择将是使用RMI套接字通信或Java消息传递服务。

  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量

  • 问题内容: 该模块的文档显示了如何将队列传递给以开头的进程。但是,如何与开始的异步工作进程共享队列?我不需要动态加入或其他任何方式,而只是工人(反复)将其结果报告给基地的一种方法。 失败的原因是: 。我理解这意味着什么,并且我理解继承的建议,而不是要求进行酸洗/酸洗(以及所有Windows特殊限制)。但如何 做 我通过队列的方式,作品?我找不到一个示例,并且我尝试了多种失败的替代方法。请帮忙? 问