確かに、私はAngularに比較的慣れていませんが、REST呼び出しにngResourceを使用することで行き詰まりました。
比較的一般的と思われるファクトリパターンに従いました。
ただし、$ promise.thenを使用することによってのみREST応答にアクセスできます。$ resourceでは必要ないことを私は理解しています。
だから私はこの工場を持っています...
var LookupsService = angular.module('LookupsService', ['ngResource']);
LookupsService.factory('Lookups', ['$resource',
function ($resource) {
return $resource('http://localhost:5001/api/lookups', {});
}]);
そしてこれは失敗します(未定義として)
alert(Lookups.get().foo);
しかし、これは問題ありません
Lookups.get()
.$promise
.then(function (lookups) {
alert(lookups.foo);
});
私は明らかにここで何かが欠けています。ある種の男子生徒のエラー;-)
更新
すべてのあなたの助けに感謝します-それは今非常に明確です。彼女の答えとスニペットを明確にするために、@ fikkatraにチェックマークを付けました。しかし、ほとんどすべての答えが役に立ちました。デバッグにAlertを使用する場合は注意が必要です。
alert
promiseでの使用は機能しません。つまり、promise内の結果は表示されません。ただし、angularは、$resource
サービスを直接使用してスコープにバインドするように設計されています。これは、$resource
結果をスコープオブジェクトにバインドできることを意味し、angularは、バインドを適用するときにスコープオブジェクトがpromiseであることを考慮します。そのためalert(resourceResult)
、機能しませんが、$scope.myObj = resourceResult;
(ビューにバインドして)機能します。
物事をより明確に説明するために挿入されたコードスニペット:
var app = angular.module('myapp', ['ngResource']);
app.controller('myctrl', function($scope, $resource) {
//this won't work:
//alert("won't work: " + $resource('https://api.github.com/users/fikkatra').get());
//but this will work
$resource('https://api.github.com/users/fikkatra').get().$promise.then(function(user) {
alert("will work: " + user.login);
});
//directly assigning $resource result to scope will work:
$scope.user = $resource('https://api.github.com/users/fikkatra').get();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-resource.js"></script>
<div ng-app="myapp" ng-controller="myctrl">
{{user.login}}
</div>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加