Javascript Angular JS承诺仅在标记中解析,而不是在模型中解析
我在解决我的承诺时遇到了一个问题,奇怪的是,在我的标记中:Javascript Angular JS承诺仅在标记中解析,而不是在模型中解析,javascript,angularjs,promise,Javascript,Angularjs,Promise,我在解决我的承诺时遇到了一个问题,奇怪的是,在我的标记中: {{details.customer_email}} 它正确解析,,并显示“$http”请求返回的电子邮件地址 但是,尝试访问此文件时: $scope.user = { ... emailAddress : $scope.details.customer_email, ... }; 是null 以下是相关的模块: $scope.session = { is_authenticated: false,
{{details.customer_email}}
它正确解析,,并显示“$http”请求返回的电子邮件地址
但是,尝试访问此文件时:
$scope.user = {
...
emailAddress : $scope.details.customer_email,
...
};
是null
以下是相关的模块:
$scope.session = {
is_authenticated: false,
customer_email: null
};
var detailsDeferred = $q.defer();
$scope.details = detailsDeferred.promise;
$scope.authed = function () {
$http({
url: 'http://api.foo/auth',
withCredentials: true,
method: "GET",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).success(function (data, status, xhr) {
$scope.session = {
is_authenticated: data.is_authenticated,
customer_email: data.customer_email
};
detailsDeferred.resolve($scope.session);
})
...
return $scope.session;
};
$scope.authed();
$scope.user = {
...
emailAddress: $scope.session.customer_email
...
};
它在您的标记中起作用是因为angular的模板引擎是“承诺感知”的,非常方便 引自: $q承诺在angular中由模板引擎识别,这意味着在模板中,可以将附加到作用域的承诺视为结果值 但是,在JavaScript代码中,您必须自己处理所有问题:
$scope.user = {
...
emailAddress : null,
...
};
$scope.details.then(function(details) {
$scope.user.emailAddress = details.customer_email;
});
非常感谢。值得注意的是,我必须在
then()
中重新定义$scope.user
对象的整体,以使其正常工作。不确定原因…您可能希望在$scope.user
中使用defer/promise,还有我的2美分。请用您的进度和新问题更新您的问题。