私は現在、大学の最終年度プロジェクトに取り組んでいます。私は、データベースからデータを取得し、ユーザー入力を使用してデータを操作してグラフを生成するUIを作成しています。JavaScript関数の同期
イベントの順序は次のとおりです。DataCtrlはHTTP getを使用してデータベースからデータを取得します。これにより、データがdataFactoryに格納されます。その後、RadioCtrlは選択のためのユーザー入力を探します。これはuserFactoryに格納されます。
私がしたいのは、dataFactoryのデータとuserFactoryの入力を比較する関数を作成することですが、dataFactoryが定義されていないことを引き続き示します。私は何かの約束/遅れを実装する必要があると理解していますが、私はどちらも使用していません。私はJavascriptをその場で学んでいますので、これをどうやって行うのか、あるいはそれが最善の方法それ。私のコードは以下の通りです。ご質問やアドバイスをいただければ幸いです。
app.factory('dataFactory', function() {
var data = [];
var ids = [];
var areas = [];
var speakers = [];
var nonSpeakers = [];
var notStated = [];
var highestEd = [];
var gender = [];
var labourPop = [];
//Array of functions for data
var dataService = {};
dataService.getData = function(response) {
data.push(response);
response.forEach(function(element){
ids.push(element.id);
areas.push(element.area);
labourPop.push(element.labourPop);
speakers.push(element.irishSpeakers);
nonSpeakers.push(element.nonIrishSpeakers);
notStated.push(element.notStated);
highestEd.push(element.highestEd);
gender.push(element.gender);
})
};
dataService.list = function(){
return data;
}
return dataService;
});
app.factory('userFactory', function(){
var education;
var gender;
var location;
var graph;
//Add user input functions here
var userService = {
};
userService.filter = function(dataFactory) {
dataFactory.ids.forEach(function(element){
if(education ===dataFactory.highestEd[element])
graph.push(dataFactory.data[element]);
})
console.log(dataFactory.ids);
};
return userService;
});
app.controller('GraphCtrl', function(dataFactory, userFactory){
userFactory.filter(dataFactory);
});
app.controller ('DataCtrl', function(dataFactory, $http) {
$http.get("http://localhost:6698/ngdemo/rest/users")
.then(function(response) {
dataFactory.getData(response.data);
})
});
app.controller('RadioCtrl', function(userFactory) {
userFactory.education = {
education : ''
};
userFactory.gender = {
gender : ''
};
userFactory.location = {
location : ''
};
});
.then()内のコードは他のすべての後に呼び出されます。比較コードがdataFactory.getData(response.data)より前に実行されている可能性があります。解決策は、dataFactory.getData(response.data)の後で.then()の内部で比較を開始することです。 –