AngularJS在不同html文件中的模块之间进行通信

时间:2017-03-22 04:59:13

标签: javascript angularjs

我想在两个html文件和两个模块之间共享几个变量。首先,我使用了如下服务,但它没有用。 在vote.js中:

var vote = angular.module('vote', []);
vote.service('voteParam', function () {
this.candidates = [];
this.show_result;
this.vote_begin;
this.elec_begin;
this.setValue = function (voteParam) {
    this.department = voteParam.department;
    this.group = voteParam.group;
    this.type = voteParam.type;
    this.round = voteParam.round;
    this.times = voteParam.times;
    this.advance_num = voteParam.advance_num;
 }
});

在vote-setting.js中:

angular.module('admin')
.controller('vote_setting', function ($scope, $http, voteParam) {
 $scope.begin_vote = function () {
        init();
        startit();
        $scope.vote_begin = true;
        $scope.elec_begin = true;
        voteParam.vote_begin = true;
        voteParam.elec_begin = true;
        voteParam.show_result = false;
        voteParam.setValue($scope.voteParam);
        if (voteParam.candidates.length == 0) {
            $scope.get_candidate();
        }
    };
}

当在vote-setting.js中将值设置为true时,它在vote.js中显示为undefined。我认为这是因为当我在vote-setting.html中导入vote-setting.js时,服务中的变量会再次初始化。有没有其他方法可以使这项工作?

服务有效。但是当再次导入js文件时,其中的变量值会被初始化。这是这个问题的关键。感谢

2 个答案:

答案 0 :(得分:0)

将您的共享数据服务实施为工厂。

实施适当的getter和setter。

封装变量并仅公开getter,setter。

共享数据服务的示例(也可以用作共享模型)

app.factory('voteParam', function() {
  var param1;
  var param2;
  var param3;

  return {
    setParam1: function(value){
      param1 = value;
    },
    getParam1: function(){
      return param1;
    },
    setParam2: function(value){
      param2 = value;
    },
    getParam2: function(){
      return param2;
    },
    setParam3: function(value){
      param3 = value;
    },
    getParam3: function(){
      return param3;
    }
  }
});

在应用程序中,此工厂应仅初始化一次。

如果您使用2个不同的角度应用程序(在您的情况下为“投票”和“管理员”),则使用本地存储或会话存储在它们之间共享数据

答案 1 :(得分:0)

您可能想了解以下内容:

通常,角度应用程序应该只有一个基本模块。这是使用ng-app指令添加到html的模块。因此,您的html内容只会知道一个有角度的应用。

但是,您可以根据需要创建任意数量的其他模块。这些可以是您的自定义模块,也可以是第三方库(由其他开发人员编写的模块供您随时使用)。在上述任何一种情况下,您需要将额外的模块作为依赖项添加到基础模块中,如下所示:

angular.module('baseModule',['extraModule1,extraModule2]);

完成此操作后,您可以使用任何额外模块中编写的任何directiveservicefactory组件,就像它们一样全部写在baseModule

说完这些并提出您的问题后,您提供的代码似乎不足以完全诊断您的问题。但是,无论我得到什么,我建议您将vote模块添加到admin模块,反之亦然。如果您有任何其他模块作为基本模块,则需要将voteadmin作为依赖项添加到该模块。

希望这有助于您开始解决问题。如果有任何事情似乎还不清楚,请告诉我。