2016-06-15 21 views
1

AngularJSの新機能です。簡単な質問であれば、私の謝罪を受け入れてください。質問のタイトルが理解できることを願っていますか?角度コントローラのMVCコントローラから返されたJSONデータを読む

私はASP.Net MVCアプリケーションでAngularJSを使用して、SQLサーバーテーブルからデータを準備し、ビューにデータを表示します。すべてがうまく見えますが、より高度な作業を進めようとすると、Angularモジュールからオブジェクトを読み取ることができないことがわかります。

たとえば、ユーザーの連絡先の詳細を読んで、各ユーザーの連絡先の数が異なります。したがって、ng-repear limitToは同じであってはいけません。これを行うには、私はいくつかのデータを読みたかったし、私がデータベースで見つかった項目の数に変数を設定し、これが私の見解の一部である私のng-repear limitTo

でその変数を使用します。

<table> 
<tr ng-repeat="contact in users | limitTo:loopVar"> 
    <td> 
     <div ng-show="!contactsElements" class="item_list">{{contact.contacts + " (" + contact.contactDesc + ")"}}</div> 
    </td> 
</tr> 

loopView

は、私はこれは角モジュール/コントローラである

を使用する変数であります

MVCコントローラは以下の通りです:

public JsonResult GetUser() 
    { 
     User userData = (User)Session["user"];    
     var db = new testDBEntities(); 
     return this.Json((from userObj in db.Users 
          join uc in db.UserContacts 
          on userObj.Id equals uc.usrID 
          join us in db.Users 
          on userObj.usrSupervisor equals us.Id 
          where userObj.Id.Equals(userData.Id) 
          select new 
          { 
           Id = userObj.Id, 
           usrNme = userObj.usrNme, 
           fName = userObj.usrFirstName, 
           lName = userObj.usrLastName, 
           ssno = userObj.usrSSN, 
           contacts = uc.usrContact, 
           contactDesc = uc.usrContactDescription, 
          }) 
          , JsonRequestBehavior.AllowGet 
         ); 
    } 

私はあなたが私のポイントを理解してほしい...一般的には、どのように私は私の見解では、それを使用する前に、私の角度コントローラに返さJSONオブジェクトを読み取ることができますか?ご覧のとおり、私はng-repeatディレクティブを使用して私のビューでデータを読み取ることができますが、私は角度コントローラの個々のフィールドをどのように準備するか分かりません。

は、返されたデータオブジェクトは、あなたのコントローラー化するJsonResultでそれを指定する方法をフォーマットされているあなたに

+0

ようloopVar値を設定した後getUsers関数を呼び出すことですか?サーバーから来る 'users'配列のプロパティではありません.... – Claies

+0

私はまだそれを持っていません、返されたJSONからいくつかのデータベースオブジェクトをAngular $ scopeにその値を割り当てます。looVar –

+0

'$ scope.users'と同じように' .success'コールバックの中に割り当てます。 '.success'の外に*割り当てようとすると、まだ応答がサーバーから返されていないので(async)、値はまだ存在しません。あなたがわからない場合は、asyncで読み上げたいかもしれません。また、 '.success'は非難されていますので、代わりに' .then'を使うことをお勧めします。 – Claies

答えて

0

ありがとうございます。あなただけ化するJsonResultにコントローラから一つの値を送信したい場合は、この

は、例えば、あなたが言ってみましょうようにあなたがそれを行うことができますGETUSER機能

$http.get('/Home/GetUser') 
    .success(function (result) { 
     $scope.users = result; 

     //Loop the json 
     if (result != null) { 
      for (var i = 0; i < result.length; i++) { 

       //Then you get the values like this 

       //result[i].Id; 
       //result[i].usrNme; 
       //result[i].fName; 
       //result[i].lName; 
       //result[i].ssno; 
       //result[i].contacts; 
       //result[i].contactDesc; 

       } 
     } 

    }) 
    .error(function (data) { 
     console.log(data); 
    }); 

あなたのコントローラから渡された配列内の各を取得するために

お使いのコントローラに()メソッド呼び出しGetLoopVarを持っている:

public JsonResult GetLoopVar() 
{ 
    string loopVar = "Im a var"; 
    return Json(loopVar, JsonRequestBehavior.AllowGet) 
} 

を使用しているクライアントに

$http.get('/Home/GetLoopVar') 
    .success(function (result) { 

     $scope.loopVar = result; 

     //$scope.loopVar = "Im a var" 

    }) 
    .error(function (data) { 
     console.log(data); 
    }); 

ここで2つを組み合わせて目的を達成するには、まずフィルタで使用される範囲値が設定されていることを確認します。 loopVarが設定されたら、ユーザーを取得します。それをする 一つの方法は、あなたが `loopVar`が定義されている。この

myApp.controller('mainController', function ($scope, $http) { 

    $scope.getLoopVar = function(){ 
     $http.get('/Home/GetLoopVar') 
      .success(function (result) { 
       $scope.loopVar = result; 

       //Call get user function 
       $scope.getUsers(); 
      }) 
      .error(function (data) { 
       console.log(data); 
      }); 
    }; 

    $scope.getUsers = function(){ 
     $http.get('/Home/GetUser') 
      .success(function (result) { 
       $scope.users = result; 
      }) 
      .error(function (data) { 
       console.log(data); 
      }); 
    }; 

    //To get the values on load, call the $scope.getLoopVar() in the controller 
    $scope.getLoopVar(); 
} 
+0

ありがとう、これは非常に役に立ちました –

+0

素晴らしい!お力になれて、嬉しいです :) –

関連する問題