0

私は、データベースからのドロップダウンオプションを引っ張るの工場を持っている:その値でドロップダウンからオプションを選択します - Angularjs

app.factory('populateDDL', function($http) { 
    'use strict'; 
    return function (tbl,key) { 
     var json, 
      data = JSON.stringify({ 
       sKey: key, 
       sTableName: tbl 
      }); 
     return $http.post('util.asmx/populateDDL',data). 
     then(function(response) { 
      return JSON.parse(response.data.d); 
     }); 
    }; 
}); 

私はその後、私のコントローラで選択/ドロップダウン・リストに、そのデータを適用します。

app.controller('userSettings', function($scope, $http, populateDDL) { 
      $scope.clinicLocations = new populateDDL('locations',key). 
      then(function(response) { 
       console.log(response); 
       $scope.clinicsDDL = response.locations; 
       $http({ 
        url: 'util.asmx/returnUser', 
        method: 'POST', 
        data: {sUserId: uid}, 
       }) 
       .success(function(user) { 
        $scope.user = user.d; 
       }) 
       .error(function(data, status, headers, config) { 
        console.log(data+', '+status+', '+headers+', '+config); 
       }); 
      }); 
     }); 

ここでは、selectタグがどのように見えるかです:

<select ng-model="clinicsDDL.item" ng-options="item.name for item in clinicsDDL track by item.id" ngRequired /> 

$に入れられるリストデータのドロップダウンscope.clinicsDDLは次のようになります。

私のコントローラ内部
{ 
    "__type": "User", 
    "FirstName": "Erik", 
    "LastName": "Grosskurth", 
    "DefaultLocationId": "39" 
} 

私は、ドロップダウンリストを読み込む/選択してから、私は、ユーザーIDを取る:DBから

[{ 
    "id": "19", 
    "name": "other clinic" 
}, { 
    "id": "39", 
    "name": "My clinic" 
}] 

返されたユーザデータは次のようになりますユーザー情報のためDBに提出してください。このユーザー情報が戻ってきます。それから、DBから返される「DefaultLocationId」に基づいて、以前に設定されたリストから特定のオプションを選択したいとします。

どうすればいいですか?

$scope.clinicsDDL.item = $scope.clinicsDDL[0]; 

^^^私は常に同じように形成される配列に依存することはできませんので、私は動作しません。私は、整数ではなく "DefaultLocationId"に基づいて配列アイテムをターゲットにする必要があります。

jQueryでは、$( 'clinicsDDL option [value = "19"')を使用してセレクタをターゲットにします。doSomething();

私はそれがこのような角度何かでそのようなことだろうと考えました。

$scope.clinicsDDL.item = $scope.clinicsDDL[value="19"]; 

^^^それは事前選択は、参照のみを使用しています

答えて

-1

いずれも動作しません。要素を選択したいときに要素を含むフィールドがわからない場合は、要素を検索する必要があります。代わりにarray.filterを使用しての()あなたは何のアイテムが見つからなかったときは未定義戻りますlodashのfind関数(https://lodash.com/docs#find

//preselect DefaultLocationId 39 
$scope.clinicsDDL.item = _.find($scope.clinicsDDL, {DefaultLocationId : 39}); 

_.find(...)を使用する必要があります。だから、あなたは未定義のままか、

$scope.clinicsDDL.item = _.find($scope.clinicsDDL, {DefaultLocationId : 39}) || $scope.clinicsDDL[0]; 
+0

angular.jsのようにデフォルト値を使用することができます:13424にReferenceError:_あなたのプロジェクトとあなたのhtmlにlodashを含める必要が –

+0

定義されていません。 [lodash.com](https://lodash.com/)を参照してください。 –

+0

これは、角度ソリューションではありません。私は他のプラグインでも1行の修正を完了することができます。私は純粋な角のソリューションを探しています、ありがとう –

関連する問題