当浏览器加载我的webapp时,还会加载以下常量。
var v1_module = angular.module('v1_module', []);
v1_module.constant('v1_data', {
params: [
{
name: "foo",
items: [
{
name: "item 1",
checked: false
},
{
name: "item 2",
checked: false
}
]
},
{
name: "bar",
items: [
{
name: "item 3",
checked: false
},
{
name: "item 4",
checked: false
}
]
}
]
});
用户可以通过界面更改它的值,假设他使用复选框将第一项的选中值更改为true,然后他必须能够将v1_data
的内容保存到.txt文件。稍后可以将此.txt文件导入应用程序以更新v1_data
并相应地更改界面(在上面的示例中,必须选中第一项的复选框)。我意识到我不应该使用constant
,因为我不能改变它的价值。我也尝试使用value
,但没有成功。有可能做到这一点吗?我应该使用哪种服务?我正在获取上传的文件并尝试更新v1_data
,如下所示。这是错的吗?
function getInputFile(files)
{
var reader = new FileReader();
reader.readAsText(files[0]);
reader.onload = function()
{
var input_file = JSON.parse(reader.result);
var v1_data = input_file[0].data;
v1_module.value('v1_data', v1_data);
}
}
答案 0 :(得分:0)
不确定你在这里发生了什么,但是你应该在通过服务启动模块后获取文件:
angular.module('myApp',[]).service('getTextFile',function($q){
this.getInputFile = function(files){
var defer = $q.defer();
var reader = new FileReader();
reader.readAsText(files[0]);
reader.onload = function()
{
var input_file = JSON.parse(reader.result);
var v1_data = input_file[0].data;
defer.resolve(v1_data);
}
return defer.promise;
}
}).run(function(getTextFile,$rootScope){
getTextFile.getInputFile().then(function(file){
$rootScope.file = file;
});
});