2

私はAngular.JSが初めてで、ng-repeatを適切に実装する方法を見つけようとしています。

私のスコープには、データベースの JSON から形成されたデータ オブジェクトがあります。返される「フィールド」の 1 つが、単一の文字列または配列の場合があります。

例:

Email Address = "me@test.com" or
Email Address = ["me1@test.com", "me2@test.com", "me3@test.com"]

電子メール アドレスに含まれるものが何であれ、一連のスパンで表示したいだけです。これまでのところ、私はこれを行ってきました:

<span ng-repeat="EMAIL_ADDRESS in data.EMAIL_ADDRESS">
    <span>{{EMAIL_ADDRESS}}</span><br />
</span

3の配列である電子メールアドレスの場合、これを取得します(これが必要です):

    <span>me1@test.com</span><br />
    <span>me2@test.com</span><br />
    <span>me3@test.com</span><br /> 

私が得る単なる文字列である電子メールアドレスの場合:

    <span>m</span><br />
    <span>e</span><br />
    <span>@</span><br />
    <span>t</span><br />
    <span>e</span><br />
    <span>s</span><br />
    <span>t</span><br />
    <span>.</span><br />
    <span>c</span><br />
    <span>o</span><br />
    <span>m</span><br />

後の状況をどのように防ぐことができますか?これがよりJavascriptの動作であることは知っていますが、Angularに配置する方法がわかりません。

4

4 に答える 4

1

角度のある方法は、データを受け取った後にデータをフォーマットすることです。値が文字列の場合は、その値を含む配列に置き換えます。このようにして、テンプレートは一貫した結果を受け取り、コントローラー ロジックは一貫したデータ構造を処理します。

編集:サーバーからの生の戻りデータを $scope に直接バインドしません。サーバーとクライアントのデータ名/タイプの間に一定レベルの分離を追加して、将来の変更を容易にし、強い結合をなくしたいと考えています。

JS :

$http.get('/my/data').success(function(data) {
  //here's where I'd do all the data transformation and binding
  if(angular.isArray(data.EMAIL_ADDRESS)) {
    $scope.emailAddresses = data.EMAIL_ADDRESS;
  else {
    $scope.emailAddresses = [data.EMAIL_ADDRESS];
  }
});

HTML :

<span ng-repeat="emailAddress in emailAddresses">

このようにして、テンプレートはサーバー API の戻り値/プロパティにバインドされません

于 2013-07-23T13:22:23.967 に答える