我想在两个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文件时,其中的变量值会被初始化。这是这个问题的关键。感谢
答案 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]);
完成此操作后,您可以使用任何额外模块中编写的任何directive
,service
,factory
组件,就像它们一样全部写在baseModule
。
说完这些并提出您的问题后,您提供的代码似乎不足以完全诊断您的问题。但是,无论我得到什么,我建议您将vote
模块添加到admin
模块,反之亦然。如果您有任何其他模块作为基本模块,则需要将vote
和admin
作为依赖项添加到该模块。
希望这有助于您开始解决问题。如果有任何事情似乎还不清楚,请告诉我。