1

これが本当の初心者の質問である場合はお詫び申し上げます。私はコールドスタートとして AngularJS と restangular に来ています - 私はいくつかの古いバックエンド指向のコードを、SPA と XHR のこの派手な新しい世界に移植しています。

とにかく、これは本当に簡単です。API からオブジェクトをロードしたいのです。私はこの方法でかなり簡単にそれを行うことができます:

App.factory('User', function($cookies, Restangular) {
  if (!$cookies.user_id) {
    return {name: 'Nobody', userId: -1};
  } else {
    return Restangular.one('users', $cookies.user_id).get();
  }
});

App.controller('ApplicationCtrl', function ($scope, User) {
  $scope.user = User;
});

これにより、(私が理解しているように)必要な場所に現在のユーザーを挿入できます(Cookieが正しくない場合、API呼び出しで404または401が返されます.

私が今抱えている単純な問題は、テンプレートでこのユーザー オブジェクトにアクセスしたいときに、{{user}} ではなく {{user.user}} にバインドされていることです。私の User オブジェクトは、JSON で作成されたオブジェクトであり、Restangular でフェッチされました ( {"user":{"id":2,"name":"Eric Eslinger","email":"eric.eslinger@gmail.com"}}「こんにちはユーザー名」と言いたい場合は、「こんにちは、{{user.user.name}}」と言わなければならないように見えました)。 .

オブジェクト階層を設定する際に欠けているものについてのアドバイスは大歓迎です。後で心配する必要がある、単純で重要な何かが欠けているような気がします。

4

1 に答える 1

2

私自身の質問に答えるために、これは実際には角度のあるものではなく、一般的な角度のあるもの (ngResource は同じように動作します) であり、EmberJS の動作とは少し直交しています。EmberJS (または、少なくとも私が使用していた Ember-Data のバージョン) では、JSON API 応答にルート要素が含まれていることが期待されますが、Ember-Data はこれを無視します (または、結果オブジェクトの型付けに使用します)。$resource と restangular はルート要素に対応します。{"id:2" ...そのため、代わりに単に返すように API を変更する{"user":{"id":2 ...か、結果に対して transformResponse を実行できます。あなたの電話。

私は API とフロント エンドの両方を作成しており、現在この API を使用している人は他にいないので (安定したら変わるでしょう)、API が JSON を出力する方法を変更しました。バックエンドは active_model_serializers を使用するので、とりあえず, root: falseいくつかの場所に を置きます。簡単です。

于 2013-09-18T23:02:41.923 に答える