我有以下问题:
$scope.creneaux1=creneauxFactory.list();
console.log($scope.creneaux)
给了我我的期望:
Object {}
并在对象内
creneaux : Arrays[35]
inscriptions : Arrays[554]
等。
每当我尝试使用
访问铭文数组时console.log($scope.creneaux.inscriptions)
console.log($scope.creneaux.inscriptions[0])
console.log($scope.creneaux["inscriptions"])
我未定义。
我该怎么办?
因此使用了工厂零件:
var creneaux ={},
urlphp = "http://bacly.fr/baclymphp/",
phpFiles = {
getCreneaux: "getCreneaux.php",
getInscriptionsclub: "getInscriptionsclub.php",
getUsers: "getUsers.php"
},
countResponse=0;
function getDate(from, onSuccess, onError) {
$http.get(urlphp + from).then(function (response) {
if (response) {
if (onSuccess) {
onSuccess(response)
}
} else if (onError) {
onError()
}
}, function () {
onError();
}
)
}
getDate(phpFiles.getCreneaux, function (response) {
creneaux.creneaux = response.data;
countResponse++;
}, function () {
alert("pas d acces reseau");
});
getDate(phpFiles.getInscriptionsclub, function (response) {
creneaux.inscriptions = response.data;
countResponse++;
}, function () {
alert("pas d acces reseau");
});
getDate(phpFiles.getUsers, function (response) {
creneaux.users = response.data;
countResponse++;
}, function () {
alert("pas d acces reseau");
});
return {
getResponseAfterSuccess: function (onSuccess, onError) {
if (Object.keys(phpFiles).length == countResponse) {
if (onSuccess) onSuccess(tournois);
} else {
if (onError) onError(tournois);
}
},
list: function(){
return creneaux;
},
listinsc: function(){
return creneaux.inscriptions;
},
findcreneau: function(cid){
return _.find(creneaux.creneaux, function(t) {return t.creneau_id === cid});
},
findinscription: function(cid){
return _.filter(creneaux.inscriptions, function(t) {return t.inscriptions_uid == cid});
},
更新:我试图改进我的代码但是当我使用例如:
$scope.selectedinscription=creneauxFactory.findinscription(window.localStorage.getItem('logmbaclyuid'));
我得到一个空数组。如何继续等待数据可用?
答案 0 :(得分:1)
您需要等待,直到收到所有数据,然后触发回调。这是一种方法。
<div ng-app="myApp" ng-controller="testCtrl">
<pre>
{{selectedinscription|json}}
</pre>
</div>
// Factory
var app = angular.module('myApp', []);
app.factory('dataFactory', function ($http) {
var urlphp = "http://jsonplaceholder.typicode.com/",
phpFiles = {
getCreneaux: "posts",
getInscriptionsclub: "albums",
getUsers: "comments"
},
countResponse = 0;
function getDate(from, onSuccess, onError) {
$http.get(urlphp + from).then(function (response) {
if (response) {
if (onSuccess) {
onSuccess(response)
}
} else if (onError) {
onError()
}
}, function () {
onError();
})
}
return {
creneaux: {},
init: function (callback) {
var that = this;
getDate(phpFiles.getCreneaux, function (response) {
console.log(response);
that.creneaux.creneaux = response.data;
that.getResponseAfterSuccess(callback);
}, function () {
alert("pas d acces reseau");
});
getDate(phpFiles.getInscriptionsclub, function (response) {
console.log(response);
that.creneaux.inscriptions = response.data;
that.getResponseAfterSuccess(callback);
}, function () {
alert("pas d acces reseau");
});
getDate(phpFiles.getUsers, function (response) {
console.log(response);
that.creneaux.users = response.data;
that.getResponseAfterSuccess(callback);
}, function () {
alert("pas d acces reseau");
});
},
getResponseAfterSuccess: function (callback) {
if (_.keys(phpFiles).length === _.keys(this.creneaux).length) {
callback();
}
},
list: function () {
return this.creneaux;
},
listinsc: function () {
return this.creneaux.inscriptions;
},
findcreneau: function (cid) {
return _.find(this.creneaux.creneaux, function (t) {
return t.id === cid
});
},
findinscription: function (cid) {
console.log("Searching for " + cid);
console.log(this.creneaux);
return _.filter(this.creneaux.inscriptions, function (t) {
return t.id == cid
});
}
};
});
// Controller
app.controller('testCtrl', function ($scope, dataFactory) {
var onSuccess = function () {
$scope.selectedinscription = dataFactory.findinscription(1);
};
dataFactory.init(onSuccess);
});
这是一个有效的Fiddle。我使用通用REST API来提取数据,但你明白了。
答案 1 :(得分:0)
creneaux : Arrays[35]
inscriptions : Arrays[554]
如果这是在$ scope.creneaux中,那么输出意味着creneaux拥有另一个creneaux数组,所以你可以像这样访问它:
console.log($scope.creneaux.creneaux[0])