0

約束を解決する際に問題が発生しています。奇妙なことに、これは私のマークアップにあります。

{{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
        ...
    };
4

1 に答える 1

1

マークアップで機能しているのは、Angular のテンプレート エンジンが「プロミス対応」であるためです。非常に便利です。

ドキュメントから引用:

$q プロミスは、Angular のテンプレート エンジンによって認識されます。つまり、テンプレートでは、スコープにアタッチされたプロミスを結果の値であるかのように扱うことができます。

ただし、JavaScript コードでは、すべて自分で処理する必要があります。

$scope.user = {
    ...
    emailAddress : null,
    ...
};

$scope.details.then(function(details) {
    $scope.user.emailAddress = details.customer_email;
});
于 2013-07-29T20:46:40.910 に答える