我想在一个控制器中使用函数之间的变量。 控制器: app.controller {.......
$http.get("json.php")
.success(function (response) {
$scope.m = response.p;
$scope.licznikm = $scope.m.length;
$scope.date = new Date();
$scope.openp = function (id, m) {
ngDialog.open({
template : 'formn.php',
className : 'ngdialog-theme-default',
backdrop : 'static',
});
$scope.name = m;
$scope.id = id;
console.log($scope.name); //is OK
console.log($scope.id); // is OK
};
console.log($scope.miasta); //undefined
console.log($scope.id); //undefined
答案 0 :(得分:2)
http调用是异步的,这意味着下面的最终日志代码可能会在http调用完成并且值已设置之前运行。最简单的解决方案是确保在使用它们之前获得值,这可以通过在http成功后调用的回调中包含使用它们的代码来完成。例如
$http.get("json.php")
.success(function (response) {
$scope.m = response.p;
$scope.licznikm = $scope.m.length;
$scope.date = new Date();
$scope.openp = function (id,m) {
ngDialog.open({
template: 'formn.php',
className: 'ngdialog-theme-default',
backdrop : 'static',
});
$scope.name = m;
$scope.id = id;
console.log($scope.name); //is OK
console.log($scope.id); // is OK
// a callback fn
useNewValues();
};
});
function useNewValues() {
// should be the vals from http response now
console.log($scope.name);
console.log($scope.id);
}
答案 1 :(得分:0)
您可以随时保存承诺并使用它,以确保代码在完成之前不会运行。
var have_data = $http.get("json.php")
.then(function (response) {
$scope.m = response.p;
$scope.licznikm = $scope.m.length;
$scope.date = new Date();
$scope.openp = function (id, m) {
ngDialog.open({
template : 'formn.php',
className : 'ngdialog-theme-default',
backdrop : 'static',
});
$scope.name = m;
$scope.id = id;
console.log($scope.name); //is OK
console.log($scope.id); // is OK
});
});
然后当你想要做任何其他需要你实际检索数据的事情时,只需用承诺包装它:
have_data.then(function() {
console.log($scope.id);
});
如果已经提取了数据,该功能几乎会立即执行,如果尚未到达,它将在数据到达时立即执行。
您可以根据需要多次重复使用have_data承诺。