0

私はAngularJSの動的フォームで作業しています。私のuserid値によると、同じモデル名のng-repeatを使って複数のフォームフィールドを生成しました。私は場所を読み込むために選択ボックスを使用しています。デフォルトで私の要件ごとに、私はその選択ボックスに最初のオプション値をロードする必要があります。私はその最初のオプションデータを読み込むためにng-initを使用していますが、動作していません。内部のコントローラ私は$ scope.user.locationのような選択ボックスモデルの値を取得しようとしていたが、エラーを示した。誰もあなたはこの問題のためにいくつかのJSフィドルの解決策を送ってください。それを行うにはng-repeat with angular form選択ボックス

HTML

<div ng-app="myApp"> 
    <div ng-controller="myCtrl"> 
    <form role="form" name='userForm' novalidate> 
     <div class="container"> 
      <div class="row" ng-repeat="user in users"> 
       <div class="form-group"> 
        <div class="col-md-3"> 
         <label>ID</label> 
         <input ng-model="user.id" id="user.id" name="user.id" placeholder="Enter bugid" type="text" required readonly disabled> 
        </div> 
        <div class="col-md-3"> 
         <label>Comments</label> 
         <textarea ng-model="user.comment" id="textarea1" rows="1" required></textarea> 
        </div> 

        <div class="col-md-3 "> 
         <label>Location</label> 

         <select ng-model="user.location" ng-options="v for v in locations" ng-init='user.location=location[0]' name="select2" required> 

         </select> 
        </div> 
       </div> 

      </div> 
     </div> 
     <div class="buttonContainer text-center btn-container"> 
      <br> 
      <button ng-disabled="userForm.$invalid" type="button" id="adduser" ng-click="adduser()">Add user</button> 
      <button type="button" class="btn button--default btn--small pull-center">Close</button> 
     </div> 
    </form> 
    <script src="https://code.jquery.com/jquery.min.js"></script> 
    <link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" type="text/css" /> 
    <script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script> 
</div> 

JS

var myApp = angular.module('myApp', []); 
myApp.controller('myCtrl', function($scope) { 
    $scope.ids = [1, 2, 3]; 
    $scope.users = $scope.ids.map(function(id) { 
     return { 
      id: id, 
      comment: "", 
      location: "" 
     }; 
    }); 
    $scope.locations = ['india', 'usa', 'jermany', 'china', 'Dubai']; 
    $scope.adduser = function() { 
     var data = $scope.users.map(function(user) { 
      //i am trying this method also 
      /*$scope.user.location.push($scope.locations[0]); 
       $scope.user.location = $scope.user.location.slice(); 
       console.log($scope.user.location) its doesnt work. */ 
      return { 
       "userid": user.id, 
       "manualcomment": user.comment, 
       "location": user.location 
      } 
     }); 
     console.log("data", data) 
    } 
}); 

答えて

0

一つの方法は、$タイムアウトコールバックであなたのNG-のinitコードを実行することです。 問題は、ディレクティブ間の実行順序に起因します。 したがって、次のダイジェストでそれを起動するために、$タイムアウトでinitを遅らせてください。ここで

は一例です:

var myApp = angular.module('myApp', []); 
 
myApp.controller('myCtrl', function($scope, $timeout) { 
 
    $scope.ids = [1, 2, 3]; 
 
    $scope.users = $scope.ids.map(function(id) { 
 
    return { 
 
     id: id, 
 
     comment: "", 
 
     location: "" 
 
    }; 
 
    }); 
 
    $scope.locations = ['india', 'usa', 'jermany', 'china', 'Dubai']; 
 
    $scope.initLocation = (user) => { 
 
    $timeout(() => { 
 
     user.location = $scope.locations[0]; 
 
    }); 
 
    } 
 
    $scope.adduser = function() { 
 
    var data = $scope.users.map(function(user) { 
 
     //i am trying this method also 
 
     /*$scope.user.location.push($scope.locations[0]); 
 
     $scope.user.location = $scope.user.location.slice(); 
 
     console.log($scope.user.location) its doesnt work. */ 
 
     return { 
 
     "userid": user.id, 
 
     "manualcomment": user.comment, 
 
     "location": user.location 
 
     } 
 
    }); 
 

 
    console.log("data", data) 
 
    } 
 

 
});
<div ng-app="myApp"> 
 
    <div ng-controller="myCtrl"> 
 
    <form role="form" name='userForm' novalidate> 
 
     <div class="container"> 
 
     <div class="row" ng-repeat="user in users"> 
 
      <div class="form-group"> 
 
      <div class="col-md-3"> 
 
       <label>ID</label> 
 
       <input ng-model="user.id" id="user.id" name="user.id" placeholder="Enter bugid" type="text" required readonly disabled> 
 
      </div> 
 
      <div class="col-md-3"> 
 
       <label>Comments</label> 
 
       <textarea ng-model="user.comment" id="textarea1" rows="1" required></textarea> 
 
      </div> 
 

 
      <div class="col-md-3 "> 
 
       <label>Location</label> 
 

 
       <select ng-model="user.location" ng-options="v for v in locations" ng-init='initLocation(user)' name="select2" required> 
 

 
         </select> 
 
      </div> 
 
      </div> 
 

 
     </div> 
 
     </div> 
 
     <div class="buttonContainer text-center btn-container"> 
 
     <br> 
 
     <button ng-disabled="userForm.$invalid" type="button" id="adduser" ng-click="adduser()">Add user</button> 
 
     <button type="button" class="btn button--default btn--small pull-center">Close</button> 
 
     </div> 
 
    </form> 
 
    <script src="https://code.jquery.com/jquery.min.js"></script> 
 
    <link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" type="text/css" /> 
 
    <script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script> 
 
    </div>

0

あなたは

<md-select ng-model="user.location" name="select2" required> 
    <md-option ng-repeat="v in locations" value="{{v}}" ng-selected="v == user.location" > 
               {{v}} 
    </md-option> 
    </md-select> 

ngの選択を試すことができます条件を受け取り、そのオプションは、条件があるため、デフォルトで選択されていますtrue

+0

これはあなたを助けましたか? –