AngularJs不想returndefer.promise
AngularJs doesn't want to return defer.promise
这是我的看法(抱歉变量和函数名称太长):
<tr ng-repeat="passation in passations " >
<td ng-init=" passation.stats_quota_campagnes = get_stats_quota_campagnes(passation)">{{passation.stats_quota_campagnes}}</div></td>
</tr>
这是我的 angularjs 函数,它应该 return 结果 :
$scope.get_stats_quota_campagnes = function(passation){
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
defer.resolve(data);
});
return defer.promise;
}
console.log(数据);显示这个,'我从 PHP 后端获取正确的数据:
Object { 0: "401", Quota: "401" }
但我已经尝试了很多东西,但完全无法将配额值放入我的视图中! defer.promise 变量总是空的我不明白为什么。请问我能做什么?
在我看来,实际上是这样的:
{}
而不是值,而 console.log 表明它正在工作,正确的变量来自 $http,但视图不会更新。我听说过 $apply(),但不知道如何使用它。
您只能在 then
回调中访问已解决的承诺值:
somePromise.then(function(value) {
console.log(value)
})
在你的情况下,你可以这样做:
$scope.get_stats_quota_campagnes = function(passation){
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
$scope.data = data;
});
}
然后您可以在模板中访问 $scope.data
您无需对您的承诺做任何事情,只需在 .then
回调中将数据分配给您的变量即可:
$scope.get_stats_quota_campagnes = function(passation){
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
passation.stats_quota_campagnes = data;
});
}
在您看来:
<tr ng-repeat="passation in passations">
<td ng-init="get_stats_quota_campagnes(passation)">
{{passation.stats_quota_campagnes}}
</td>
</tr>
这不是它的工作原理。如果你想初始化 passation.stats_quota_campagnes
范围,你必须在控制器中调用服务,然后将结果分配给范围。
例如
angular.module('app')
.controller('myController', ['$scope', 'myService', function ($scope, myService) {
//...some other code in your controller.
$scope.passation.stats_quota_campagnes = [];
$scope.get_stats_quota_campagnes = function (passation, index) {
myService(passation).then(successCallback, failCallback);
function successCallback(response) {
$scope.passation[index].stats_quota_campagnes = response;
};
function failCallback(response) {
//Do whatever you have to do.
}
};
//This requires you have passation array initialized.
angular.forEach(passation, function(val,index) {
$scope.get_stats_quota_campagnes(val,index);
});
}])
.service('myService', ['$http', '$q', function ($http, $q) {
return function (passation) {
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes', {
'id_passation': passation.id_passation
})
.success(function (data) {
console.log(data);
defer.resolve(data);
});
return defer.promise;
}
}])
然后在视图中
<tr ng-repeat="passation in passations" >
<td>{{passation.stats_quota_campagnes}}</td>
</tr>
这是我的看法(抱歉变量和函数名称太长):
<tr ng-repeat="passation in passations " >
<td ng-init=" passation.stats_quota_campagnes = get_stats_quota_campagnes(passation)">{{passation.stats_quota_campagnes}}</div></td>
</tr>
这是我的 angularjs 函数,它应该 return 结果 :
$scope.get_stats_quota_campagnes = function(passation){
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
defer.resolve(data);
});
return defer.promise;
}
console.log(数据);显示这个,'我从 PHP 后端获取正确的数据:
Object { 0: "401", Quota: "401" }
但我已经尝试了很多东西,但完全无法将配额值放入我的视图中! defer.promise 变量总是空的我不明白为什么。请问我能做什么?
在我看来,实际上是这样的:
{}
而不是值,而 console.log 表明它正在工作,正确的变量来自 $http,但视图不会更新。我听说过 $apply(),但不知道如何使用它。
您只能在 then
回调中访问已解决的承诺值:
somePromise.then(function(value) {
console.log(value)
})
在你的情况下,你可以这样做:
$scope.get_stats_quota_campagnes = function(passation){
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
$scope.data = data;
});
}
然后您可以在模板中访问 $scope.data
您无需对您的承诺做任何事情,只需在 .then
回调中将数据分配给您的变量即可:
$scope.get_stats_quota_campagnes = function(passation){
$http.post('backend/backend.php?action=stats_quota_campagnes',{'id_passation':passation.id_passation})
.success(function(data){
console.log(data);
passation.stats_quota_campagnes = data;
});
}
在您看来:
<tr ng-repeat="passation in passations">
<td ng-init="get_stats_quota_campagnes(passation)">
{{passation.stats_quota_campagnes}}
</td>
</tr>
这不是它的工作原理。如果你想初始化 passation.stats_quota_campagnes
范围,你必须在控制器中调用服务,然后将结果分配给范围。
例如
angular.module('app')
.controller('myController', ['$scope', 'myService', function ($scope, myService) {
//...some other code in your controller.
$scope.passation.stats_quota_campagnes = [];
$scope.get_stats_quota_campagnes = function (passation, index) {
myService(passation).then(successCallback, failCallback);
function successCallback(response) {
$scope.passation[index].stats_quota_campagnes = response;
};
function failCallback(response) {
//Do whatever you have to do.
}
};
//This requires you have passation array initialized.
angular.forEach(passation, function(val,index) {
$scope.get_stats_quota_campagnes(val,index);
});
}])
.service('myService', ['$http', '$q', function ($http, $q) {
return function (passation) {
var defer = $q.defer();
$http.post('backend/backend.php?action=stats_quota_campagnes', {
'id_passation': passation.id_passation
})
.success(function (data) {
console.log(data);
defer.resolve(data);
});
return defer.promise;
}
}])
然后在视图中
<tr ng-repeat="passation in passations" >
<td>{{passation.stats_quota_campagnes}}</td>
</tr>