1

サンプルコードはこちらこちらで入手できます。Plunker は IE8 または IE9 を十分にサポートしていないため、最新の Web ブラウザーで Plunker の例を開き、別のウィンドウで [実行] ペインを起動して、その URL を IE8 または IE9 で開くことにより、サンプル コードを実行できます。

$resource.query または $resource.get を使用して RESTful 呼び出しを行う場合、カスタム アクションが定義されて使用されている場合、promise は IE8 または IE9 で結果を返しません。

factory('ResourceService2', ['$resource', '$q', function($resource, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $resource('data.json', {'cacheSlayer' : new Date().getTime()}, {
                'query': { 
                    method: 'GET', 
                    responseType: 'json',
                    isArray: true
            }}).query(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

クエリ():

ResourceService2.query().then(function (response) {
    $scope.resource2Rows = response;
});

ただし、カスタム アクションが定義または使用されていない場合、この同じ呼び出しは正常に結果を返します。

factory('ResourceService', ['$resource', '$q', function($resource, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $resource('data.json', {
                'cacheSlayer' : new Date().getTime()
            }, {}).query(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

クエリ():

ResourceService.query().then(function (response) {
    $scope.resourceRows = response;
});

$http を使用しても成功します。

factory('HttpService', ['$http', '$q', function($http, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $http.get('data.json', {
                params: {
                    'cacheSlayer' : new Date().getTime()
            }}).success(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

得る():

HttpService.query().then(function (response) {
    $scope.httpRows = response;
});

これは IE8/IE9 のバグですか? IE8/IE9 との互換性のために定義する必要があるカスタム アクションの追加パラメーターは何ですか? Angular Developer's Guide は、1.2.7 の時点でこの問題について言及していません。

4

1 に答える 1