AngularJS: 来自一次 $http 调用的两个承诺
AngularJS: two promises from one $http call
我想知道 initialize/the 我从 AJAX 调用中填充并在指令中某处使用 'concurrently' 的对象的最优雅方法是什么。
我有一个带有这样片段的控制器:
$scope.var1 = {};
$scope.var2 = {};
$http({
url: "/httpService",
method: "GET",
params: {}
}).success(function(data, status) {
$scope.var1 = data.some; // (*1)
$scope.var2 = data.other;
})
我也在使用直接绑定到 var1 的指令:
var1 : '='
在指令内部对 var1 进行了一些检查。
if (var1.prop) // (*2) {
doSth();
}
根据先调用 (*1)、(*2) 中的哪一个,结果不同。
你对这个案例有什么建议?如果我只将一个变量设置为 (*1),我将只使用作为 $http 的结果获得的承诺。
我想知道在 Angular 中最惯用的方法是什么。
将 var1 和 var2 组合成一个对象对我来说似乎不太优雅。
在您的指令中创建一个函数,从 $http 调用中获取承诺。给函数一个回调函数:
if (var1.prop) // (*2) {
doSth();
}
通过制作回调的这一部分,您可以确保在数据从调用返回之前不会完成。
您不能在一个电话中获得两个承诺。你有一个承诺和一个电话。就这样对待它。
如果我没看错 - 你想将异步接收的部分数据传递给 指令 ,但你不希望指令 'know' 关于收到的数据结构。
然后您可以将数据请求移出 controller 并使用 services (docs, examples) 作为附加层将处理数据请求并提供方法来直接提取 var1
(或 var2
)以供在控制器内部使用(并进一步在指令中使用)。
我想知道 initialize/the 我从 AJAX 调用中填充并在指令中某处使用 'concurrently' 的对象的最优雅方法是什么。
我有一个带有这样片段的控制器:
$scope.var1 = {};
$scope.var2 = {};
$http({
url: "/httpService",
method: "GET",
params: {}
}).success(function(data, status) {
$scope.var1 = data.some; // (*1)
$scope.var2 = data.other;
})
我也在使用直接绑定到 var1 的指令:
var1 : '='
在指令内部对 var1 进行了一些检查。
if (var1.prop) // (*2) {
doSth();
}
根据先调用 (*1)、(*2) 中的哪一个,结果不同。
你对这个案例有什么建议?如果我只将一个变量设置为 (*1),我将只使用作为 $http 的结果获得的承诺。
我想知道在 Angular 中最惯用的方法是什么。 将 var1 和 var2 组合成一个对象对我来说似乎不太优雅。
在您的指令中创建一个函数,从 $http 调用中获取承诺。给函数一个回调函数:
if (var1.prop) // (*2) {
doSth();
}
通过制作回调的这一部分,您可以确保在数据从调用返回之前不会完成。
您不能在一个电话中获得两个承诺。你有一个承诺和一个电话。就这样对待它。
如果我没看错 - 你想将异步接收的部分数据传递给 指令 ,但你不希望指令 'know' 关于收到的数据结构。
然后您可以将数据请求移出 controller 并使用 services (docs, examples) 作为附加层将处理数据请求并提供方法来直接提取 var1
(或 var2
)以供在控制器内部使用(并进一步在指令中使用)。