2017-02-09 5 views
0

私のデータベースには2つのテーブルがあります:PeopleとPayband。だから私は、ASP.NET Webを作成しましたAngularJSとWeb APIとの一対多の関係からドロップダウンを作成

dbo.People

PersonId : int (PK) 
FirstName : string 
MiddleInitial: string 
LastName : string 
DateOfBirth: datetime 
PaybandId : int (FK) 

dbo.Paybands

Id : int (PK) 
Name : string 

:私は、下記の関係の縮小版をあげますバックエンドのAPIサービス、フロントエンドにHTML/CSSとAngularJSを使用しています。私は引っ張って表示し、データを編集することができます問題はありません。ここに私のフォームはどのようなものかのイメージがあります:

enter image description here

私は人に割り当てられている現在のPayband値を取得することができるよ、唯一の問題は、私は他のすべてのPaybandを取得することができませんよということです値を入力してHTMLドロップダウンに表示すると、任意の人物の支払いバンドを簡単に変更できます。私がやろうとしていることを達成する方法が失われているので、誰かがこれを手伝うことができれば、本当に感謝しています。事前にありがとうございます。他にご質問がありましたら、遠慮なくご相談ください。

はまた、ここに私のAngularJSコントローラは(はい、私は現在、テストのために人のIDをハードコーディングしています)です:

angular 
.module("personnelService") 
.controller("PersonnelEditCtrl", 
      PersonnelEditCtrl); 

function PersonnelEditCtrl(personnelResource) { 
var vm = this; 
vm.person = {}; 
vm.message = ''; 

personnelResource.get({ id: 2 }, 
    function (data) { 
     vm.person = data; 
     vm.person.dob = new Date(vm.person.dob); 
     vm.originalPerson = angular.copy(data); 
    }); 

if (vm.person && vm.person.personId) { 
    vm.title = "Edit: " + vm.person.firstName + " " + vm.person.lastName; 
} 
else { 
    vm.title = "New Person"; 
} 

vm.submit = function() { 
    vm.message = ''; 
    if (vm.person.personId) { 
     vm.person.$update({ id: vm.person.personId }, 
      function (data) { 
       vm.message = '... Save Complete'; 
      }) 
    } 
    else { 
     vm.person.$save(
      function (data) { 
       vm.originalPerson = angular.copy(data); 
       vm.message = '... Save Complete'; 
      }) 
    } 
}; 

vm.cancel = function (editForm) { 
    editForm.$setPristine(); 
    vm.person = angular.copy(vm.originalPerson); 
    vm.message = ""; 
}; 

}

+0

で具体的にどのような問題は本当に明確ではありません。使用可能なPaybandsと$リソースまたは$ httpを取得するには、apiエンドポイントが必要です – charlietfl

+0

私の問題は、かなりわかりました。そうでなければ、すみません。私はPaybandsデータベーステーブルのデータベースエントリを適切にドロップダウンする方法を知らない。たとえば、Paybandsに(FTE、Contractor)があり、表示している現在のユーザーが現在FTEに設定されている場合、このユーザーを編集しているときにプルダウンをクリックすると、FTEとContractorの両方がドロップダウンに表示されます。現在、AngularJSでこれを達成する方法がわからないため、このユーザーの値「FTE」しか取得できません。 – Element808

答えて

1

あなたがpaybandsのリストを公開するサーバー上のエンドポイントを持っている必要があります述べたように、つまり、あなたは、データベースからPaybandsのリストを返すGETアクションの結果が必要になりますコントローラでPaybandsControllerという名前のコントローラ。 paybandResourceはこれに貼り付けられ、クエリ機能を使用して公開する必要があります。 Yaserが指摘するように、そのvm.paybandsをUIに接続します。ビューで

function PersonnelEditCtrl(personnelResource, paybandResource, $filter) { 
    var vm = this; 
    vm.person = {}; 
    vm.message = ''; 
    vm.paybands = []; 

    paybandResource.query(function(data) { 
     vm.paybands = $filter('orderBy')(data, 'Name'); 
    }); 

//....... 

<select 
    ng-model="person.paybandId"     
    ng-options="payband.name for payband in paybands track by payband.id"> 
</select> 
+0

確かに、私はコントローラを手に入れました。 ASP.NET/MVC/Web API側では、私はすべてうまくいき、フロントエンドに必要なすべてのデータを公開することができます。私はまだAngularJSの使用に慣れていて、1つのAngularJSコントローラで両方のクエリを組み合わせる方法がわかりませんでした。 – Element808

+0

paybandResourceはまだ作成されていますか?今...私はちょうど私が私のpersonnelResourceために作成したものを模倣するつもり –

+0

作成しています... (関数(){ 「厳格な使用」; 角度 .module(「common.services」) 。工場( "personnelResource"、 [ "$リソース"、 "のappSettings"、 personnelResource]) 機能personnelResource($リソース、のappSettings){ リターン$リソース(appSettings.serverPath +「/ API /人/:ID "、null、 { '更新':{方法: 'PUT'} }); } }()); – Element808

1

あなたはすべてのpaybandを取得する方法を持っている必要がありますし、その中にそれらを設定します。

<select 
    ng-model="person.paybandId"     
    ng-options="payband.name for payband in paybands"> 
</select> 
関連する問題